home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / os2 / srefv12i.zip / initfilt.doc < prev    next >
Text File  |  1997-04-19  |  104KB  |  2,671 lines

  1. Optimization hints, configuration information, and other commentaries
  2. on SRE-Filter.  5 Mar 1997.
  3.  
  4. This file contains several sections discussing various aspects of SRE-Filter.
  5.  
  6.  1)  Optimization hints: a discussion of ways of speeding up SRE-Filter
  7.  2)  Configuration information: a complete description of all the SRE-Filter
  8.      intialization parameters: including the more important parameters set
  9.      in INITFILT.80, and the more obscure parameters set in SREFILTR.80.
  10.  3)  Remote vs. local redirection: A discussion of the various methods
  11.      SRE-Filter uses to redirect files.
  12.  4)  A sample site: A short example of how one might use PUBLIC_URLS to
  13.      efficiently set up a site.
  14.  
  15.                   ===========================================
  16.  
  17.    SECTION 1.                    Performance hints
  18.  
  19.  
  20. (a) The use of the server side include cache (SSI-Cache) is highly
  21.     recommended. However, for very dynamic documents (such as documents
  22.     that contain several INTERPRET and #EXEC keyphrases), it may
  23.     be more efficient to suppress caching of these files (you
  24.     can use the <!-- CACHE NO --> keyphrase for just such a purpose).
  25.  
  26.       Upgraders note: now that the SSI-cache has been added to SRE-Filter, we
  27.                       NO LONGER RECOMMEND using the "send in pieces" option
  28.                       (as set by the DO_SEND_PIECE parameter).
  29.  
  30. (b) Suppressing incorporation of  server side includes (SSIs)
  31.  
  32.    i) If you set SSI_SHTML_ONLY='YES', and name html
  33.       documents, that contain SSIs, with a .SHT or .SHTML
  34.       extension: SRE-Filter will not attempt to process SSI's
  35.       in .HTM or .HTML files.  This can save some processing time.
  36.       In fact, if you are using GoServe's caching mechanism (see c below),
  37.       this can save a lot of processing time!
  38.  
  39.   ii) If you are willing to NOT have SSIs, then set
  40.           NO_INCLUDE='YES'
  41.      (this saves more processing time, and it also makes
  42.       hints (a) and (b.i) totally irrelevant)
  43.  
  44. (c) Turn on GoServe's cache.  This will have no effect on documents
  45.     containing server side includes, but can greatly speed up transfer of
  46.     other documents (such as .GIF files).
  47.  
  48.       However, if you have imposed any access controls, SRE-Filter will
  49.       suppress caching.  To get around this, you can use the CACHE permission.
  50.  
  51.    The CACHE permission (in the ACCESS_FILE) instructs GoServe to allow
  52.    caching on a request specific basis.
  53.  
  54.           One good use of this CACHE option is to cache .GIF files
  55.           that are used as in-line images (and that of themselves
  56.           contain no proprietary information or are unlikely to be requested
  57.           explicitily).  Note that html documents that have been processed for
  58.           server side includes will never be cached, regardless of the use of
  59.           this CACHE permission.
  60.  
  61.     Use CACHE with care, since cached files are sent to all requesters!
  62.  
  63. (d) If you never check "access" info, or virtual directories,
  64.     set the access_file and virtual_file to " " (or see note e).
  65.     Note that the access file can contain (on a SEL-specific basis):
  66.         i>   access control information,
  67.         ii>   ssi, ssp, delete, and put permissions,
  68.         iii>   NO_VIRTUAL, NO_ALIAS, and NO_POSTFILTER permissions
  69.         iv>   the "always cache flag",
  70.         v>   and realm information.
  71.     Thus, with access_file="":
  72.        * these permissions (et al) will equal to " "
  73.        * CAUTION: if allow_access="NO" and ACCESS_FILE=' ', then
  74.                   site access is given only to SUPERUSERS
  75.  
  76.  
  77. (e)  Use the NO_VIRTUAL, NO_ALIAS, and NO_POSTFILTER "permissions"
  78.      in the ACCESS_FILE to suppress unnecessary processing.
  79.  
  80. (f)  If you have a choice, the ACCESS_FILE method is preferable to the
  81.      the HTACCESS access control method: HTACCESS it is not
  82.      implemented with quite the same attention to efficiency.  Or,
  83.      use the NO_HTACCESS permission (in your ACCESS_FILE) whenever possible.
  84.  
  85. (g)  If you have some documents that are supposed to be
  86.      available to everyone, and these documents do not have server
  87.      side includes, set up PUBLIC_URLS entries for them (since public_urls
  88.      are cached if possible)
  89.  
  90. (h)  If ...
  91.             you are serving only 1 host,
  92.             you have many selectors that you can specify with  PUBLIC_URLS,
  93.             and these "selectors" are to be interpreted "literally" --
  94.                     with no internal redirection, auto-header creation,
  95.                     and no server side includes --
  96.      then ...
  97.             you can greatly improve throughput by using
  98.             the SREFQUIK.80 filter instead of  SREFILTR.80.
  99.  
  100.      SREFQUIK.80 is small filter that processes these "literal
  101.      public_urls" on a single host server (it also recognizes
  102.      "cached" returns).
  103.      When a "literal public_url" is requested, SREFQUIK does
  104.      all the work, saving a great deal of overhead.  That is, the
  105.      main filter (SREFILTER) is never called!
  106.      On the other hand, if the request selector does not match a
  107.      "literal public_url", the standard filter is called, with no
  108.      loss of capability.
  109.  
  110.      Notes and Cautions:
  111.  
  112.      *  Caution #1: Since SREFQUIK adds overhead to requests that are NOT to
  113.         "literal public_urls", if you specify few "literal public_urls" the
  114.         net effect may be detrimental.
  115.         So, when using SREFQUIK, it is important to  specify as many
  116.         "literal public_urls" as possible.
  117.  
  118.      *  Caution #2: If you modify SREFILTR.80 and are using
  119.         SREFQUIK as your filter, be aware that the modifications to
  120.         SREFILTR.80 will take effect AFTER you stop, then restart, GoServe.
  121.  
  122.      *  Caution #3: If you have specified multiple hosts (using the
  123.         HOSTS. variables) , SREFQUIK should NOT be used.
  124.  
  125.      *  Caution #4: If you use SREFQUIK, "cached" responses (requests
  126.         that GoServe was able to satisfy from it's cache) will
  127.         not be checked for the NO_POSTFILTER access permission
  128.         (SREFQUIK offers a work-around for this problem).
  129.  
  130.      *   For a description of "literal public_urls", see the
  131.          discussion of the PUBLIC_URLS variables, and see
  132.          Section 4 of this document
  133.  
  134.      *   For further details on the SREFQUIK "mini-filter", see SREFQUIK.DOC.
  135.  
  136. (i)  Turn on the RECORD_ALL_FILE cache.  This is useful ONLY if you
  137.      are recording all requests (i.e.; RECORD_OPTION='YES').
  138.      Turning on the cache will cause the RECORD_ALL_FILE to be cached
  139.      in memory, with disk-writes every 5 minutes.  See the description
  140.      of RECORD_CACHE_LINES for details.
  141.  
  142. (j)  If you don't need extensive auditing, set WRITE_LOGS=0
  143.  
  144. (k)  It you don't need "dynamic privileges", set CHECK_ADD_PRIVS='NO'.
  145.  
  146. (l)  As an illustrative example; an apppendix at the bottom of
  147.      this document contains a discussion of how to use SREFQUIK,
  148.      PUBLIC_URLS, etc. to efficiently setup  a site with three levels
  149.      of security.
  150.  
  151.  
  152.  
  153.  
  154.                         =============================
  155.  
  156.    Section 2.                Parameter descriptions
  157.  
  158.  
  159. The following  parameters are in alphabetical order (by name  of parameter).
  160. Many of them can be changed by using SRE-Filter's configurator,
  161. especially the "intermediate mode" configurator. However, to changes several of
  162. these parameters, you must "hand-edit" the INITFILT.80 file.  In general, the
  163. "hand-edit only" parameters are more obsure, and may never need to be changed.
  164.  
  165. "Power users" may wish to see section 2a (below) for a discussion of
  166. variables contained in SREFILTR.80 -- these are "doubly obscure"
  167. variables!
  168.  
  169. Miscellaneous Notes:
  170.  *   The terms "variable" and "parameter" are used interchangeably.
  171.  
  172.  *   In almost all cases the variables (aka parameters) are set to equal
  173.      strings, so if you are "hand editing" INITFILT.80, remember to put
  174.      single quotes (') around the stuff on the rhs of the = sign.
  175.  
  176.  *   When this document mentions "SEL-specific", it really means
  177.      "selector specific", where the selector is the slightly modified
  178.      middle portion of the request string sent by the client to the server.
  179.      For example, if the client requests a URL of:
  180.          http://your.server/animals/bear.jpg
  181.      her brower will issue a request string of:
  182.          GET   /animals/bear.jpg  http/1.0
  183.      and the selector would be
  184.                animals/bear.jpg
  185.  
  186. Notes on Host-specific parameters:
  187.  *   Almost all of the parameters (that are set in INITFILT.80) may be "host
  188.      specific".  The several that aren't are:
  189.           INTERPRET_TYPES, DISPLAY_ENV, and HOSTS.
  190.  
  191.  *   Parameters set in SREFILTR.80 (described in section 2a)
  192.      can NOT be host specific (they apply to all hosts).
  193.  
  194.  *   To specify a host-specific parameter, you append the "host nickname"
  195.      to the parameter name (see the HOSTS. variable for a discussion of
  196.      host nicknames).
  197.         For example, to set the CHECKLOG variable for the ZOO host,
  198.            CHECKLOG.ZOO='NO'
  199.         and for all other hosts:
  200.            CHECKLOG='ALWAYS'
  201.         where this non host-specific value (CHECKLOG='ALWAYS') is the
  202.         "generic" value, and will be used for hosts other then the "ZOO" host.
  203.  
  204.  *   When a request to a  host is recieved, SRE-Filter will attempt
  205.      to find the appropriate host-specific parameters. If a given
  206.      parameter does not have a host-specific value, the "generic"
  207.      (the value of the non host-specific parameter) is almost always
  208.      used instead.
  209.  
  210.          The exceptions are: UNALLOWEDIPS., INHOUSEIPS., PUBLIC_URLS.
  211.  
  212.  *   For security reasons, for these three (sets of) parameters
  213.      the generic (non host-specific) values are  NOT used as  a default.
  214.          The astute reader may notice that the OWNERS variable is not
  215.          on this list of "exceptions". In other words, the
  216.          "generic" OWNER has SUPERUSER privileges for ALL hosts.
  217.  
  218. Note on "hand edited" parameters:
  219.  *  Currently, the "hand-edited" parameters (that can NOT be set with the
  220.     intermediate mode configurator) are:
  221.        ACCEPT_RANGE      ADD_USER_NAME      ADD_RESOURCE_NAME  ADD_PRIVS_PREFIX
  222.        CHECK_ALIAS
  223.        DELIM_1.n         DELIM_2.n          DISPLAY_ENV        DO_SEND_PIECE
  224.        HTACCESS_FILE     INTERPRET_TYPES    MAX_POINTDIST      NO_INCLUDE
  225.        NO_PROCESSING     NO_INTERPRET_CODE  PREFILTER_NAME     POSTFILTER_NAME
  226.        USE_STDOUT        VERBOSE
  227.  
  228.  
  229. ************
  230. ACCEPT_RANGE: Return only specified range of the request file
  231.  
  232. You can instruct SRE-Filter to respond to a "range:" request header. If such a
  233. request header is present, SRE-Filter will extract the "byte
  234. range" information, and return only this portion of the request file.
  235.  
  236. Primary use:
  237.     Adobe Acrobat can use this to request a given page in a long .pdf file.
  238.  
  239. If accept_range=NO, this processing will not occur -- the entire file will
  240. always be returned.
  241. If accept_range=YES, this processing will occur.  Of course, if there is
  242. no range: header, then the entire file is returned.
  243.  
  244. Accept range is only used when a non-html file is requested.
  245.  
  246.   Example: accept_range='YES'
  247.  
  248. For more information on "byte range retrieval", see the document:
  249.   draft-ieft-http-range-retrieval-00.txt at ds.internic.net.
  250.  
  251. Note on GoServe and Multi-part sends:  GoServe is a bit flaky with
  252. multi-part sends (byte retrieval being a form of multi-part send).
  253. We suggest obtaining GoServe ver 2.50 from:
  254.     http://www2.hursley.ibm.com/goserve/
  255.  
  256. (ACCEPT_RANGE can be host specific)
  257.  
  258. ***********
  259. ACCESS_FAIL_FILE
  260.  
  261. If a SEL-specific access is not granted to the client, you can
  262. send the ACCESS_FAIL_FILE as a response.  ACCESS_FAIL_FILE should
  263. be one of the following values:
  264.   -1 : Do NOT send a message or ask for authorization.  This is useful
  265.        when combined with "dynamic privileges"
  266.    0 : Do NOT use an access_fail_file -- just ask for authorization
  267.    1 : If a "SEL-specific" access file exists (as set in ALL_FILE.CTL),
  268.        use it. Otherwise, ask for authorization
  269. filename.ext : The fully qualified file name to be used when access is denied.
  270.                Note that this may be overridden by a "SEL-specific" access-fail
  271.                file.
  272.  
  273. As with the LOGON_FAIL_FILE, when the ACCESS_FAIL_FILE is an HTML document,
  274. server side includes are NOT attempted.
  275. However, for HTML documents a few special substitutions will occur:
  276.     <!--#URL--> phrases are substituted with the request selector.
  277.     <!--#SERVER--> phrases are substituted with the servername.
  278.     <!-- #WEBMASTER --> phrases are substituted with the WEBMASTER variable.
  279.     <!-- #MESSAGE --> phrases are substituted with a short description
  280.                      of the reason for failure
  281.     <!-- #LINK --> phrases are substituted with a "forced" URL: which points
  282.                    back to this resource, and forces an "ask authorization"
  283.                    if access is denied.
  284.  
  285. It is HIGHLY recommended that a #LINK be included.  Without such an
  286. entry, the client will be unable to enter a new username/password, should
  287. his first entry be misspelled (or if he had previously used a
  288. different username/password for a different resource on the same server).
  289.  
  290. PROVISO:
  291.    In some cases (such as when dynamic privileges are used to control
  292.    access to .GIF files), you may want to use an ACCESS_FAIL_FILE that does
  293.    not contain a #LINK.  Or, set ACCESS_FAIL_FILE=-1 (for
  294.    a very terse "Access denied" response).
  295.  
  296. Notes:
  297.   * When set to ACCESS_FAIL_FILE=0, the client will be re-sent
  298.     an authorization request.
  299.  
  300.   * If ACCESS_FAIL_FILE=0, SEL-specific failure files are NOT used,
  301.     even if one is available.
  302.  
  303.   * The #LINK entry uses a special form of SRE-Filter request selector.
  304.     The effect is to force SRE-Filter to request authorization should
  305.     the current username/password be incorrect; thereby avoiding an
  306.     annoying recursive trap.
  307.  
  308.  
  309. (ACCESS_FAIL_FILE can be host-specific)
  310.  
  311.  
  312. ***********
  313. ADD_USER_NAME: Controls whether a clients "logon name" should be
  314.                added to the list of client privileges.
  315.  
  316.         YES: Add logon name to client privilege list
  317.         NO: Do not add logon name to client privilege list.
  318.  
  319.         This can be a useful means of personallizing a client's
  320.         privilege list (of course, you could always enter his
  321.         name in the privilege list explicitly when setting up his
  322.         username/password entry).
  323.  
  324.   Example:
  325.         ADD_USER_NAME='YES'
  326.  
  327.    Usage Example:
  328.             if a username of ACIDER exists, with a client privileges of
  329.             HARD SOFT, then if ADD_USER_NAME='YES', an ACIDER client
  330.             privilege is added (yielding a client privilege list of
  331.             ACIDER HARD SOFT).
  332.  
  333. Notes:
  334.  *   For INHOUSEIPS. entries, the "clientname" (the full, dotted, IP name) is
  335.      used as the "logon name".
  336.  
  337.  *   If you set ADD_USER_NAME=1, you should be careful that the usernames
  338.      you assign (in the USERS.IN file) do not conflict with the words used for
  339.      privileges. In particular, don't casually give someone a
  340.      username of SUPERUSER or INHOUSE.
  341.  
  342. ***********
  343. ADD_RESOURCE_NAME: Controls whether the "action" portion of the request
  344.                    selector be included as a resource privilege.
  345.  
  346.         YES: Add the action to the resource privilege list
  347.         NO:  Do not add.
  348.  
  349.         Similar to the ADD_USER_NAME, this can be a useful shortcut
  350.         in environments where highly specific access controls are
  351.         required.
  352.  
  353.         CAUTION: When ADD_RESOURCE_NAME='YES', unmatched requests
  354.                  will require clients to have a privilege matching
  355.                  the "requested resource".
  356.  
  357.    Example: ADD_RESOURCE_NAME='YES'
  358.  
  359. Notes:
  360.  *   The "action" portion of a request selector is everything before the
  361.      first ? character (if no ? is found, the entire request selector is used).
  362.  
  363.  *   If ALLOW_ACCESS='YES', ADD_RESOURCE_NAME has no effect.
  364.  
  365. ************
  366. ADD_PRIVS_PREFIX: Modifies the prefix used to distinguish "dynamic"
  367.                   client privileges.
  368.  
  369. As a security measure, when SRE-Filter adds "dynamic" privileges, it will
  370. append the ADD_PRIVS_PREFIX.  For example, if ADD_PRIVS_PREVIX='!', and
  371. a <!-- INTERPRET FILE ADDPRIVS.RXX  SATURN ,30 --> keyphrase appears
  372. in a requested document, the client will be granted a !SATURN
  373. client-privilege (in this example, for 30 minutes).
  374.  
  375. The rationale is to prevent unscrupulous individuals, who may have been
  376. granted a limited ability to post documents to "user" sub-directories,
  377. from subverting access control with keyphrases of the form:
  378.         <!-- INTERPRET FILE ADDPRIVS.RXX  SUPERUSER, 100 -->
  379.  
  380. If such problems are not likely to occur, you may want to
  381. set ADD_PRIVS_PREFIX=' '
  382.  
  383.   Example:
  384.         ADD_PRIVS_PREFIX='!'
  385.  
  386. (ADD_PRIVS_PREVIX may be host specific)
  387.  
  388. ************
  389. ALLOW_ACCESS : Control access to server resources.
  390.  
  391.    You can check "access privileges" for server resources (files, programs, etc.)
  392.    by setting the ALLOW_ACCESS variable.
  393.           YES : no access control
  394.       INHOUSE : don't check in-house and superusers.
  395.           NO  : don't check superusers.
  396.   Note that checking involves examination of privilege information
  397.   on a  per-request-selector basis (using the ACCESS_FILE file).
  398.  
  399.   The ACCESS_FILE is also used for:
  400.     1) Controlling server side include privileges and server side processing,
  401.         on a SEL-specific basis
  402.     2) Allowing caching of files that would normally not be cached
  403.         (If CHECKLOG<>"YES" or ALLOW_ACCES<>"YES", then caching is
  404.         suppressed).
  405.     3) Setting the default "realm" of the resource (see the THE_REALM variable)
  406.     4) Permitting PUT and DELETE methods to operate
  407.     5) Suppressing aliasing, virtual directory lookup, and "post-filtering"
  408.  
  409.    If you do not ever want SRE-Filter to check the access file,
  410.    just set access_file=" ". BUT if you do, the  above features will not be
  411.    available!
  412.  
  413. Notes:
  414.     * The default name of the ACCESS_FILE is ALL_FILE.CTL (in the DATA/
  415.       directory of GoServe's "working" directory).
  416.  
  417.  
  418.     * WARNING: If you set allow_access="NO", and access_file=" ", then
  419.             only SUPERUSERS will have access to your site!
  420.  
  421. (ALLOW_ACCESS can be host specific)
  422.  
  423. ********
  424. AUTO_HEADER.  Automatic generation of response headers.
  425.  
  426. AUTO_HEADER is used to automatically generate response
  427. headers, based on LINK and META HTTP-EQUIV elements in the <HEAD>
  428. section of HTML documents.
  429.  
  430. 3 values are supported:
  431.        NO : Do not generate these headers
  432.      HEAD : Generate headers for HEAD requests only
  433.    ALWAYS : Generate headers for HEAD and GET requests.
  434.  
  435. Note that this is only relevant for HTML files.
  436. Also, when AUTO_HEADER occurs, the html file is parsed for header information
  437. before server side includes are attempted -- that is, any server side
  438. include in the <HEAD> of a document will NOT appear in the response
  439. headers (but they will appear in the body of the response).
  440.  
  441. IN OTHER WORDS -- Server Side Includes SHOULD NOT BE USED IN THE
  442. <HEAD> portion of an HTML document (unless you do not intend to
  443. automatically generate response headers)
  444.  
  445.   Example: AUTO_HEADER="HEAD"
  446.  
  447. Technical note: HTTP purists would disapprove of the use of the "HEAD" value;
  448. since HEAD method requests are "supposed to" return exactly the same
  449. response headers as GET method requests.
  450.  
  451. (AUTO_HEADER can be host specific)
  452.  
  453.  
  454. *********
  455. AUTO_NAME : Resolving requests for directories.
  456.  
  457.  AUTO_NAME is used to deal with non-specific requests that are NOT to the
  458.  root (the /) directory.
  459.  
  460.  AUTO_NAME should contain a space delimited list of potential "directory
  461.  specific default names".
  462.  
  463.  Several special names are supported:
  464.       *.HTM
  465.   or  *.HTML :  means "use the "directory" name, with .HTM or .HTML appended
  466.      !CREATE :  Create a list of links, one for each file in the directory.
  467.     !CREATE* : Same as !CREATE, but include links to subdirectories
  468.  
  469.   Example: AUTO_NAME=" *.HTM INDEX.HTM PAGE.HTM DESCRIBE.HTM  !CREATE "
  470.  
  471.      If a request for xxx/yyy/ (with optional ?abc after the final /) is
  472.      recieved, then
  473.           first, yyy.htm is looked for (in datadir/xxx/yyy)
  474.         second, INDEX.HTM (in datadir/xxx/yyy).
  475.         Then PAGE.HTM, and then, DESCRIBE.HTM are tried.
  476.         If all these fail, !CREATE signals "just display a list of the files
  477.         in this directory".
  478.  
  479.  
  480.      Note that if !CREATE were not included in this list, and
  481.      none of the requested files exist, a  not_found message is returned.
  482.      Similarly, if !CREATE fails (if there is no such directory),
  483.      the not_found message is returned (see the description of NOT_FOUND_URL
  484.      for details).
  485.  
  486.  
  487.   Notes:
  488.     * AUTO_NAME is NOT used when request is to the root (to /) -- DEFAULT is
  489.       used!
  490.     * See NOEXT_TYPE for a discussion of how to deal with requests that
  491.       have neither an extension or a trailing / (i.e.; xxx/yyy).
  492.     * You can put a "pathed" name (using /, relative to the data directory)
  493.       This is one means of handling bad requests (but only if the request
  494.       ends in a /) -- just put the home page document in the auto_name list,
  495.       i.e.; auto_name=" * INDEX.HTM /HOMEPAGE.HTM "
  496.     * It is recommended that a !CREATE be placed at the end of the
  497.       AUTO_NAME list (since !CREATE is "always a match", assuming the
  498.       request points to a valid directory)
  499.  
  500.   Example: AUTO_NAME=" * INDEX.HTM  "
  501.  
  502. (AUTO_NAME can be host specific)
  503.  
  504.  
  505. CAUTION: When using AUTO_NAME (and other types of local redirection)
  506. URL resolution by the client's browser may have unexpected consequences.
  507. See the discussion of "local  vs remote redirection" at the bottom of
  508. this document for details!
  509.  
  510.  
  511. **************
  512. CHECK_ADD_PRIVS: Check for "dynamic privileges"
  513.  
  514. CHECK_ADD_PRIVS is used to instruct SRE-Filter to check for "additional,
  515. dynamic privileges", and if they exist, add them to the client's "privilege"
  516. list.
  517. CHECK_ADD_PRIVS can take two values;
  518.     YES :  Check for additional, dynamic privileges
  519.      NO:   Do NOT check for additional, dynamic
  520.  
  521.  Example:
  522.         CHECK_ADD_PRIVS='NO'
  523.  
  524. Note:
  525.   *  When CHECK_ADD_PRIVS='YES', an _ADDPRIV.DOC file is created in the
  526.      TEMPDATA_DIR directory (typically, \GOSERVE\TEMP).
  527.  
  528.   *  See ADDPRIVS.DOC for a detailed discussion of "additional, dynamic"
  529.      privileges.
  530.  
  531. (CHECK_ADD_PRIVS can be host specific)
  532.  
  533. ***************
  534. CHECK_ALIAS: Controls whether alias checking occurs.
  535.  
  536.    SREFILTR can check all requests to see if they are aliases for some
  537.    other action.
  538.  
  539.      Uses of aliases include:
  540.         *  implementation of searchable indices
  541.         * "local" redirection -- useful as a means of assigning
  542.            proper document names  to abbreviations
  543.           (say, to convert an request of OVERVU into OVERVIEW.HTM)
  544.         * "remote" document redirection -- typically to a different
  545.           ip addreess
  546.         * transferring non-data directory files
  547.  
  548.  Setting CHECK_ALIAS to --
  549.        NO suppresses this alias lookup
  550.        YES causes this lookup to be done for all requests
  551.  
  552.  
  553.   Example:  CHECK_alias="YES"
  554.  
  555. (CHECK_ALIAS can be host specific)
  556.  
  557. ************
  558. CHECKLOG:  When and how to check for "logon rights".
  559.  
  560.   "Logon rights" refer to basic site access rights.  These may
  561.   be used with, or without, SEL-specific access privileges (see ALLOW_ACCESS)
  562.  
  563.   CHECKLOG can take four values:
  564.          1) NO  -- never check (basic access granted to all clients)
  565.          2) YES -- check when default document (either explicitily, or if a /
  566.                    is requested).  Thus, a request for a specific document
  567.                    does not require logon rights.
  568.          3) ALWAYS -- check on every request.
  569.          4) INHOUSE -- Only let IN-HOUSE users in.
  570.                        IN-HOUSE users are determined by occurence of a
  571.                        INHOUSE in the client's 'privilege list', or
  572.                        if the client has an IP address listed in the
  573.                        INHOUSEIPS.n variables.
  574.    Note: if ALWAYS or INHOUSE is selected, then GOSERVE will NOT cache GET
  575.          requests (the discussion of the ALLOW_ACCESS variable
  576.          describes an exception to this through the use of the CACHE
  577.          permission)
  578.  
  579.    Example:   checklog='NO'
  580.  
  581. (CHECKLOG can be host specific)
  582.  
  583. **********
  584. DEFAULT -- The "default" (home) page.
  585.   Use this when a default request (say, http://www.joe.com/ ) occurs.
  586.  
  587.    Note: it is traditional, but by no means required,
  588.            to use INDEX.HTM as your default
  589.  
  590.   You can also use DEFAULT to redirect a request (using a 301 redirection),
  591.   say, for an IP Alias that has moved.  To do this, just enter the full
  592.   URL -- be SURE to include the leading http://
  593.  
  594.  
  595.    Examples:  default='index.htm'
  596.              default.zoo='ourzoo.htm'
  597.              default.circus='http://silly.places.net/bigtop.htm'
  598.  
  599. Note that default.zoo defines the DEFAULT file for requests to the
  600. ZOO host only.  Also note that default.circus is redirected.
  601.  
  602.  
  603. (DEFAULT can be host specific)
  604.  
  605. CAUTION: When using DEFAULT (and other types of local redirection)
  606. URL resolution by the client's browser may have unexpected consequences.
  607. See the discussion of "local  vs remote redirection" at the bottom of
  608. this document for details!
  609.  
  610. **********
  611. DIR_EXCLUSION: A list of files and subdirectories that the !DIR
  612.                directory lister should exclude.
  613.  
  614. SRE-Filter's !dir function can be instructed to suppress displaying
  615. certain files and subdirectories.  To do this, one uses the
  616. DIR_EXCLUSION parameter.  DIR_EXCLUSION should contain a space
  617. delimited list of files and subdirectories".
  618.  
  619.    Example:  dir_exclusion='Htaccess. /private describe.txt  *.CNT '
  620.  
  621. Note that a / must preceed subdirectories (otherwise, the entry is
  622. interpreted as a file name).
  623.  
  624. Notes:
  625.   *  The !dir function is used by the !CREATE option of AUTO_NAME.
  626.   *  Subdirectories are assumed to be relative to the "requested directory",
  627.      and should only be one name deep.  That is, an entry of
  628.      /personal/family would be ignored.
  629.   *  The wildcard character (*) can be used in file and directory names.
  630.   *  For a further discussion of the !dir function, see DIR.DOC.
  631.  
  632. (DIR_EXCLUSION can be host specific)
  633.  
  634. **********
  635. DIR_OPTIONS: Set the display options of the !dir function.
  636.  
  637. To control the display option of SRE-Filter's !dir function, you should
  638. modify the DIR_OPTIONS parameter.  DIR_OPTIONS should contain a
  639. space delimited list of parameters.
  640.  
  641. The allowed options are:
  642.   AUTO_DESCRIBE DESCRIBE DESC_LEN DATEFMT MULTI_SEND
  643.   NOSIZE  NOTIME NODATE NOICON NOSORT NODIR NO_RECURSE_DIR
  644.   SIZEFMT SHOWPARENT TABLE TABLE_BORDER TIMEFMT
  645.  
  646. For a description of what these options do, see DIR.DOC.
  647.  
  648.   Example: DIR_OPTIONS='notime auto_describe describe  datefmt=u '
  649.  
  650. Notes:
  651.   *  The !dir function is used by the !CREATE option of AUTO_NAME.
  652.  
  653. (DIR_OPTIONS can be host specific)
  654.  
  655. **********
  656. DISPLAY_ENV -- write "SRE-Filter" environment variables to PMPRINTF
  657.  
  658. Use this as a debugging tool to display the values of the SRE-Filter
  659. enviroment variables in the PMPRINTF window.
  660.  
  661.   DISPLAY_ENV = 1 : The SRE-Filter environment variables (basically,
  662.                     transforms of everything in INITFILT.80 and REPSTRGS.IN)
  663.                     are written to the "PMPRINTF" window.  This will occur
  664.                     whenever the environment variables are refreshed
  665.                     (say, when you change INITFILT.80).
  666.  
  667.       otherwise  : Do not write environment variables.
  668.  
  669. Example
  670.   DISPLAY_ENV=0
  671.  
  672. (DISPLAY_ENV is NOT host specific)
  673.  
  674. *************
  675. DELIMITERS for KEYPHRASES
  676.  SREFILTR does "server side" includes by looking for keyphrases in your
  677.  HTML documents. A keyphrase is defined as: delim1  keyword keyvalue delim2.
  678.  
  679.  Delim1 and Delim2 are strings (possibly 1 character) that signal the
  680.  location   of the keyphrase.  These delimiters should be odd,
  681.  yet easy to remember (and not likely to occur in your text).
  682.  ALTHOUGH WE DO NOT RECOMMEND IT, you can enter several sets of delimiters.
  683.  
  684.   One useful set is the HTML comment delimiters  '<!--'  and '-->' .
  685.   If you use these, the raw document will not look too wierd should it be
  686.   accidentally sent to the client "as is").
  687.  
  688.   For each set of delimiters, You MUST specify both the beginning (DELIM_1)
  689.   and end (DELIM_2) delimiter.
  690.  
  691.  
  692.  Examples:
  693.  
  694.      delim_1.1="<!--"
  695.      delim_2.1="-->"
  696.  
  697.      delim_1.2="{"
  698.      delim_2.2="}"
  699.  
  700.      delim_1.3=0
  701.      delim_2.3=0
  702.  
  703.  
  704. or, if just the ZOO host should recognize a second set of delimiters
  705.      delim_1.1="<!--"
  706.      delim_2.1="-->"
  707.  
  708.      delim_1.2=0
  709.      delim_2.2=0
  710.  
  711.      delim_1.1.zoo="<!--"
  712.      delim_2.1.zoo="-->"
  713.  
  714.      delim_1.2.zoo='{'
  715.      delim_2.2.zoo='}'
  716.  
  717.      delim_1.3.zoo=0
  718.      delim_2.3.zoo=0
  719.  
  720. Note: The most important reasons for NOT using several sets of delimiters:
  721.  
  722.      * SSI-Caching will be turned OFF (regardless of value of SSI_CACHE_ON)
  723.      * SSI processing will be slower
  724.      * DO_SEND_PIECE will be turned OFF
  725.  
  726.         But if you are willing to accept these performance disadvantages,
  727.         then the use of several delimiters should cause NO problems.
  728.  
  729. (DELIMS can  be host specific)
  730.  
  731. *************************
  732. DNS_CHECK: Force DNS check before access
  733.  
  734.   As a security measure, you might want to look up the IP name of the
  735. client (using the client's IP address and his DNS).  If no name can
  736. be found, logon is not allowed.
  737.  
  738.       NO: do not check DNS for an IP name
  739.       YES: Force lookup of IP name before allowing access
  740.  
  741. Although this will provide some security agains "fake" IP addresses, it
  742. will also slow down response time.  Furthermore, many legitimate clients
  743. may not have "names" (say, if they are using pooled IP addresses).
  744.  
  745. DNS_CHECK='NO'
  746.  
  747. (DNS_CHECK can be host specific)
  748.  
  749. ********
  750. DO_SEND_PIECE: Allow SRE-Filter to send "pieces" of a document as they
  751.                become available.
  752.  
  753.    NOTE: We no longer recommend enabling the DO_SEND_PIECE parameter -- it
  754.          conflicts with the SSI Cache (that is, we recommend DO_SEND_PIECE=0).
  755.  
  756.    To speed up percieved throughput for large documents that contain
  757.    server side includes, transferal of earlier portions of the
  758.    document "as they become" available is recommended.
  759.  
  760.    DO_SEND_PIECE controls this feature, with values:
  761.          NO :  Do NOT send "pieces of the document" as they become
  762.                available (send the entire document when it's ready)
  763.          YES:  DO send these pieces.
  764.  
  765.    DO_SEND_PIECE is ignored if there is more then one set of
  766.    delimiters, or if FIX_EXPIRE is greater then 0.  If either of these
  767.    hold, "pieces" will NOT be sent (that is, DO_SEND_PIECE is set to NO).
  768.  
  769.  Example:
  770.    DO_SEND_PIECE='NO'
  771.  
  772.  
  773. WARNING: If you want to "set header elements" (such as cookies)
  774.          by using server side includes (i.e.; by using INTERPRET
  775.          keyphrases), then you MUST set DO_SEND_PIECE='NO'
  776.  
  777. (DO_SEND_PIECE can be host specific)
  778.  
  779. ********
  780. DO_HTACCESS: Controls whether the HTACCESS method is used.
  781.  
  782. To provide compatability with HTTPD style servers (such as Don Meyer's
  783. GOHTTP), SRE-Filter supports the HTACCESS method of access control
  784. (see the description of HTACCESS_FILE in INITIFLT.DOC for details).
  785.  
  786. DO_HTACCESS can take two values
  787.    YES:   Enable support of the HTACCESS access control method
  788.    NO:    Do NOT support HTACCESS.
  789.  
  790.   Example:  DO_HTACCESS='YES'
  791.  
  792.  
  793. When DO_HTACCESS='YES', SRE-Filter will check for an HTACCESS file
  794. in the directory (and parent directories) of the requested file.
  795. Note that this control is by "file name", rather then by request selector.
  796.  
  797. Details on HTACCESS files are in the description of the
  798. HTACCESS_FILE variable.
  799.  
  800. Details concerning the use of the HTACCESS method can be found at:
  801.   http://w3.ag.uiuc.edu/DLM/GoHTTP/htaccess.html
  802.  
  803.  
  804. (DO_HTACCESS can be host specific).
  805.  
  806.  
  807. *********
  808. FIX_EXPIRE:  For fixing the GoServe automatic response header.
  809.  
  810. For certain responses; when FIX_EXPIRE > 0 , instead of returning
  811. the default GoServe response headers, SRE-Filter will generate it's own.
  812. In particular, it will add FIX_EXPIRE "fractions of a day" to the
  813. current date/time, and use it as the File-Expires date.
  814.  
  815. FIX_EXPIRE is used whenever a server-side include containing HTML
  816. document is being returned.  It is also use by several SRE-Filter
  817. add-ons (such as by GETAFILE and DOSEARCH), and by CGI-BIN programs.
  818. To use it in a custom REXX program, see the description of SREF_FIX_EXPIRE
  819. in SREFPRC1.DOC  (SREFPRC1.DOC is available from
  820. http://rpbcam.econ.ag.gov/srefilter/srefprc1.doc).
  821.  
  822. Note that if FIX_EXPIRE=0, the default GoServe response
  823. headers will be used --plus any headers that may have been specified
  824. using the META and LINK elements in the HEAD (see AUTO_HEADER).
  825.  
  826. Setting FIX_EXPIRE > 0 can be useful when relatively static (that do not
  827. depend on the current "hour") server side includes are performed.
  828. In such cases, GoServe automatically sets the expiration time to be
  829. the current moment.  This can be a hassle for some clients (Netscape
  830. will reload such "expired" documents if "backed up" to).
  831.  
  832. Note that a value of FIX_EXPIRE=0.1 = .1 * 24 hours = 2.4 hours.
  833. Also note that to use DO_SEND_PIECE, you must set FIX_EXPIRE=0
  834.  
  835. Example: FIX_EXPIRE=0
  836.  
  837. (FIX_EXPIRE can  be host specific)
  838.  
  839. Alternative method of suppressing "immediate expire":
  840.   *  When creating REXX server side programs, you can avoid this
  841.      problem by using 'FILE TYPE ... NAME TEMPFILE ' rather then
  842.      'FILE ERASE TYPE ... NAME TEMPFILE ' -- the "expire immediately"
  843.      response header is NOT added to non 'FILE ERASE' completion codes.
  844.         However, you should remember to delete your TEMPFILE (use the
  845.         sysfiledelete rexx procedure).
  846.         ... furthermore, you may want the document to expire in a few hours,
  847.             a message FIX_EXPIRE is designed to deliver.
  848.  *   If you are using GoServe ver 2.50, the HEADER NOTIME option can be used.
  849.                 SPECIAL OPTION: If you are useing GoServe 2.50, setting
  850.                 FIX_EXPIRE=1000 will invoke this HEADER NOTIME option.
  851.  
  852.  
  853. **********
  854. HEADERS and FOOTERS: Automatically added to all HTML documents.
  855.     You can specify a block of HTML code to include at the beginning and the
  856.     end of the body of the document.  This is done by specifying HEADERS.n
  857.     (n=1...) and FOOTERS.n
  858.     To suppress this, set HEADERS.1=0 and/or FOOTERS.1=0
  859.  
  860.     Notes:
  861.         * HEADERS.n lines are written (consecutively) just after the first
  862.           <BODY> phrase in your document (see example 3 below for an exception
  863.           to thisrule)
  864.         * FOOTERS.n lines are written just before the last </BODY> phrase
  865.           in your document.
  866.  
  867. Examples:
  868.  
  869.   1) Simple case:
  870.      HEADERS.1=' <em> Our docuuments are supplied as-is </em> <p>'
  871.      FOOTERS.1=' <p> <strong> goodbye  </strong> '
  872.  
  873.   2)To suppress headers and footers
  874.      HEADERS.1=0
  875.      FOOTERS.1=0
  876.  
  877.   3) The "exception":
  878.     Headers.1='<BODY bgcolor="#5500aa"> <h1> This is our site! </h1> '
  879.  
  880.         Whenever the HEADERS.1 lines begins with <BODY, then
  881.         rather then writing the header AFTER the first <BODY ...> element,
  882.         the header will replace the first <BODY ..> element.
  883.  
  884.  
  885. HEADERS and FOOTERS can be host specific.
  886.   For example:
  887.       HEADERS.1.ZOO = ' <B> The ZOO server </b> '
  888.       HEADERS1.1.CIRCUS = '  <em> The Circus Site </em>
  889.       HEADERS.2.ZOO=0
  890.       HEADERS.2.CIRCUS=0
  891.  
  892.   will set up a one-line header for the ZOO and for the  CIRCUS "hosts".
  893.  
  894. *************
  895. HOME_DIR: The "home directory" -- used as a text replacement whenever a ~
  896.           is encountered in a request selector.
  897.  
  898. A typical value of this would be "Users/".
  899.  
  900.   Example: HOME_DIR='USERS/'
  901.  
  902. (HOME_DIR can be host specific)
  903.  
  904. ADVANCED OPTION: Specifying User Subdirectories
  905.   In many cases, you may wish clients to have access to particular
  906.    subdirectories of your "Users" directories.  For example, all
  907.    "students" may have space on the server machine, some of which
  908.    is used for web, and some for "personal" purposes. The goal is to
  909.    give clients direct access to the "web" related directories
  910.    but not to the "personal" directories.
  911.  
  912.    This can be achieved by including a $ in the HOME_DIR parameter.
  913.    Specifically, the $ is replaced by the substring between the  ~ and the
  914.    first / following the ~.
  915.  
  916.    For example:,
  917.      If the  HOME_DIR=USERS/$/WWW
  918.         and the request selector is /~GERALD/RESUME.HTM
  919.      Then SRE-Filter will use:
  920.         /USERS/GERALD/WWW/RESUME.HTM
  921.    Summarizing, given a $ in the HOME_DIR.
  922.      1) SRE-Filter reads the substring (of the request selector) between ~ and
  923.         the first / following the ~ (i.e.; GERALD)
  924.      2) The substring is deleted from the request selector
  925.      3) The $ in the HOME_DIR is replaced with this substring (from step 1)
  926.      4) The ~ in the modified request selector (from step 2) is replaced with
  927.         the modified HOME_DIR (from step 3)
  928.  
  929.  
  930. NOTES:
  931.  
  932.  * If there is no $ in the HOME_DIR, a simple HOME_DIR for ~
  933.    replacement is done. For example, if HOME_DIR=USERS/and the
  934.    request selector is /~GERALD/RESUME.HTM, the result would be
  935.    /USERS/GERALD/RESUME.HTM
  936.  
  937.  * If a / immediately follows the ~ (in the request selector), the $ is
  938.    removed from HOME_DIR (without replacement).
  939.  
  940.  * HOME_DIR substitution occurs BEFORE virtual file lookup and AUTO_NAME
  941.    construction, but after ALIAS conversion.  Thus, the ~ can point to a
  942.    virtual directory (or a subdirectory of a virtual directory).
  943.  
  944.  * HOME_DIR for ~ substitution is also used when resolving filenames
  945.    requested in server side includes.
  946.  
  947.  * CAUTION: Since HOME_DIR is used in a direct textual substitution, only
  948.             a mild degree of syntax checking  is attempted. In particular,
  949.             // are  converted to /.  To be safe, be sure your use of ~ is
  950.             internally consistent.
  951.  
  952.  
  953. **************
  954. HOSTS. :  Stem variable containing information on multiple hosts.
  955.  
  956. The HOSTS. stem variable(s) is used to define the multiple hosts
  957. (IP addresses) your server will recognize.
  958.  
  959. Each HOSTS. entry should contain the following comma-delimited information:
  960.     IP_address, host_nickname, default_dir
  961.  
  962. Where:
  963.     IP_address is the IP address (numeric or character) of the host.
  964.                 You should use the full name -- do not use a "local
  965.                 abbreviation" (that is, don't use bill as a shorthand
  966.                 for bill.my.org; even though your local dns may recognize it)
  967.     host_nickname is the "nickname" that you will use to refer to this host.
  968.                 It MUST NOT be a number -- that is, it must contain
  969.                 a non-numeric character. Thus, 234 is invalid, but
  970.                 N234 is okay.
  971.     default_directory is the default data directory for this host
  972.  
  973. Examples:
  974.     hosts.1="dh.ag.gov , MY1 , e:\WWW1  "
  975.     hosts.2=" 151.122.33.6 ,  H20 ,e:\www2  "
  976.     hosts.3=0
  977.  
  978.   If you do NOT have multiple hosts, set hosts.1=0
  979.   Note that we recommend that the last hosts. value = 0.
  980.  
  981. A Caution on Using IP Aliases:  IP aliases offer a convenient means of
  982. setting up multiple hosts (IP names) while only using one numeric ip address.
  983. Unfortunately, use of IP name aliases requires browsers that understand
  984. HTTP/1.1; specifically, that send the HOST: request header with each request.
  985. Although NetScape (2.0+) will do this, most older browsers will not!
  986. In these cases, SRE-Filter will use the numeric IP address (that is, it will
  987. use the "canonical name" for the IP address, rather then the desired alias).
  988.  
  989. Note: When using multiple hosts, you can specify many of SRE-Filter's
  990. parameters, both here and in the various .IN, .CNT, and .CTL files,
  991. to be "host specific".
  992.  
  993.  
  994. For obvious reasons, HOSTS can NEVER be host specific!
  995.  
  996.  
  997. ****************
  998. HIT_CACHE_LEN and HIT_CACHE_DURATION:  Used to limit false hits.
  999.  
  1000. To reduce the number of "false hits" (from clients returning to
  1001. your document after a short absence, which is often caused by the
  1002. use of a browser's "back" button), a current hits list can be
  1003. maintained.  If a request matches a request in this list (where
  1004. the request selector and the client's IP address are both used),
  1005. the "count of hits" will not be augmented.  Specifically,
  1006. the COUNTER_FILE and the RECORD_ALL_FILE will not be augmented.
  1007.  
  1008. There are two methods of storing these current hits: in the
  1009. "environment" or in a "file".
  1010.  
  1011. 1) Environment. It's fast to access, but can not be large (OS/2 has
  1012.    problems with large environment strings).
  1013.    To specify this, set HIT_CACHE_LEN to the number of K you wish to set
  1014.    aside.  For example:
  1015.          HIT_CACHE_LEN=5
  1016.    (note: each request needs about 50 bytes, more if the request selector
  1017.           is long.  Thus, this example would store approximately
  1018.           the 100 most recent requests)
  1019.  
  1020. 2) File.  Not as fast, but can contain an indefinite number of hits.
  1021.    To specify this, set:
  1022.          HIT_CACHE_LEN='FILE'
  1023.    A special file in the TEMP/ subdirectory of the GoServe "working"
  1024.    directory, with the name _HITCACH.80 (or .nnn if nnn is your serverport)
  1025.    is created and used to store recent hits.
  1026.  
  1027.     Each selector/client pair will be retained for HIT_CACHE_DURATION minutes.
  1028.     Note that "overflow" will NOT occur, but the _HITCACH.80 file may
  1029.     become large.  Since "expired" entries are removed, only in rare
  1030.     circumstances (extremely heavy load, or when HIT_CACHE_DURATION is
  1031.     very large), will the file size become problemmatic.
  1032.  
  1033.  
  1034. To turn of this feature, set HIT_CACHE_LEN=0
  1035.  
  1036.  
  1037. Example:
  1038.    HIT_CACHE_LEN=2
  1039.    HIT_CACHE_DURATION=5
  1040.  
  1041.    HIT_CACHE_LEN='FILE'
  1042.    HIT_CACHE_DURATION=20
  1043.  
  1044. Notes:
  1045.  
  1046.  * Since use of the environment to store large amounts of data can
  1047.    result in odd effects a limit of 50K on the size of HIT_CACHE_LEN
  1048.    is imposed.  HIT_CACHE_DURATION is limited on the lower end to 1 (minute),
  1049.    with no limit on the upper end.
  1050.  
  1051.  * If you are using the FILE mode, a limit of 10,000 entries is imposed.
  1052.  
  1053.  * HIT_CACHE_LEN and HIT_CACHE_DURATION can NOT be host specific.
  1054.  
  1055.  
  1056.  
  1057.  
  1058. *****************
  1059. HIT_OWNER_SUPPRESS: Used to suppress hit recording from "OWNERS"
  1060.  
  1061.     Switch to turn off and on the "suppresion of OWNER request"
  1062.        HIT_OWNER_SUPPRESS='YES'
  1063.            Do not record (in the COUNTER_FILE or RECORD_ALL_FILE)
  1064.            any request from an OWNERS.
  1065.        HIT_OWNER_SUPPRESS='NO'
  1066.             Requests from OWNERS are recorded.
  1067.  
  1068. This is provided to limit the number of false hits attributable to
  1069. site-maintenance operations (say, from the Webmaster monitoring
  1070. her own site).
  1071.  
  1072. Example:
  1073.         HIT_OWNER_SUPPRESS='YES'
  1074.  
  1075. Note: the HIT_SUPERUSER_SUPPRESS variable (set in srefiltr.80)
  1076.       can be used to extend the "range" of HIT_OWNER_SUPPRESS to
  1077.      include SUPERUSERS.
  1078.  
  1079. ***************
  1080. HOME_NAME  : The name of your organization
  1081.   The colloquial (not necessarily IP name) of your organization.
  1082.   This can be included in a document by using the REPLACE HOME_NAME
  1083.   keyphrase.  Note it's use in NOT_FOUND_URL.
  1084.  
  1085.     home_name="DIVISION/AGENCY/DEPARTMENT/GOV"
  1086.  
  1087. (HOME_NAME can be host specific)
  1088.  
  1089. *******
  1090. HTACCESS_FILE : The name of the HTACCESS file.
  1091.  
  1092. When DO_HTACCESS='YES', SRE-Filter will look in the "requested file's"
  1093. directory (and it's parent's directory) for file(s) with the name
  1094. given by HTACCESS_FILE.  Typically, this is HTACCESS. or .HTACCESS,
  1095. but you can use any name you want (but do NOT include path information).
  1096.  
  1097.  
  1098.   Example:  HTACCESS_FILE='HTACCESS.'
  1099.  
  1100.  
  1101. (HTACCESS_FILE can be host specific)
  1102.  
  1103.  
  1104. Hint: The HTACCESS_FILE contains access control information, as well as
  1105. URL redirection and "default index" information.  To use the URL
  1106. redirection, you should set up a file containing entries of the form:
  1107.     old_url  :  new_url
  1108. i.e.
  1109.     PLANET/JUPITER.HTM   :  http://www.starts.edu/ss/n5.htm
  1110. (note the old_url should not contain http://, and should not contain
  1111. the dot address)
  1112.  
  1113. (HTACCESS_FILE can be host specific)
  1114.  
  1115. *******
  1116. INHOUSEIPS. : Stem variable containing IP address of "in-house" clients.
  1117.   You can specify any number of "in-house IP domains".
  1118.     Just specify the 4 elements --
  1119.          you can use * for "all" (say * in  111.222.33.*)
  1120.  
  1121.     If Logon controls are desired, then clients with these
  1122.     IP addresses are automatically given access (they don't need to
  1123.     provide a username and password).
  1124.  
  1125.     In addition, you can specify extra privileges for each inhouseips. entry.
  1126.  
  1127.  
  1128. Examples:
  1129.        inhouseips.1="151.121.64.* VIEWMESS CONTROL "
  1130.        inhouseips.2="JOE.USDA.GOV   "
  1131.        inhouseips.3=0
  1132.        (All clients from 151.121.64.xxx are given VIEWMESS and CONTROL
  1133.         privileges, in addition to the privileges contained in the
  1134.         INHOUSE_PRIVS variable)
  1135.  
  1136. Notes:
  1137.  *  If you do NOT want to identify "in-house" clients, set inhouseips.1=0
  1138.  
  1139.  *  Note that we recommend that the last inhouseips. value = 0.
  1140.  
  1141.  *  INHOUSEIPS. can be host specific.
  1142.     In fact, non-host specific values of INHOUSEIPS will NOT be used
  1143.     as "default" values!
  1144.  
  1145.     For example:
  1146.         inhouseips.1.candy='MANAGER.STORE.COM  CONTROL '
  1147.     indicates that requests from MANAGER.STORE.COM to the "host"
  1148.     with a nickname of CANDY should be treated as an "in-House"
  1149.     request. Note that if no HOSTS. are specified, this entry
  1150.     will never be used!
  1151.  
  1152.  
  1153. *******
  1154. INHOUSE. and SUPERUSERS.
  1155.      The following are special variables used with the INHOUSE.n
  1156.       and SUPERUSER.n replacement selector (see decripition of the REPLACE
  1157.       keyphrase).  They will be displayed only for
  1158.       "inhouse" and "superusers", respectively.
  1159.       Note that INHOUSE.n variables correspond to INHOUSE.n replacement
  1160.       strings, and SUPERUSER.n variables correspond to SUPERUSER.n
  1161.       replacement  strings.
  1162.  
  1163. Examples:
  1164.    inhouse.1=" (Staff Version) "
  1165.    inhouse.2=' .. more staff stuff '
  1166.    superuser.1="(Super User)"
  1167.    inhouse.3=0
  1168.    superuser.2=0
  1169.  
  1170. We recommend that the last inhouse. and superuser. should equal 0.
  1171.  
  1172. Note that inhouse. and superuser. can be host-specific; i.e.:
  1173. INHOUSE.1.CANDY='Special this week: Chocolate'
  1174.  
  1175.  
  1176. **************
  1177. INHOUSE_PRIVS: Privileges for IN-HOUSE clients.
  1178.  
  1179.   A space delimited list of  privileges to be granted to OWNERS and
  1180.   IN-HOUSE clients. It is HIGHLY recommended that INHOUSE_PRIVS always contain
  1181.   INHOUSE as one of the privileges!
  1182.  
  1183.   Example: inhouse_privs=" INHOUSE SECRET1 "
  1184.  
  1185.   Note that INHOUSE_PRIVS can be host specific.
  1186.     For example: INHOUSE_PRIVS.ZOO=' INHOUSE  SCHEDULES '
  1187.  
  1188.  
  1189. ********
  1190. INTERPRET_TYPES: Associate an extension with a CGI-BIN script processor
  1191.  
  1192. SRE-Filter can use "non-REXX" processors to interpert CGI-BIN scripts.
  1193. To do this, you must tell SRE-Filter which processor to associate
  1194. with a file extension; where the file extension appears on the
  1195. "scriptname" (that follows the CGI-BIN/ portion of the request
  1196. selector).
  1197.  
  1198. This "association" is accomplished with the INTERPRET_TYPES parameter.
  1199. INTERPRET_TYPES should be a space delimited string of "type_options".
  1200. Each type_option should have the form:
  1201.     EXT=Interpreter_invocation
  1202. For example:
  1203.   interpret_types=' PL=PERL5 FOO=D:\FAKEIT\FOOEXEC '
  1204.  
  1205.    The first type_option (PL=PERL5) instructs SRE-Filter to use the PERL5
  1206.    program to interpret all CGI-BIN scripts with a .PL extension
  1207.    (this example assumes that PERL5 can be found in the OS/2 PATH).
  1208.  
  1209.    The second type_option (FOO=D:\FAKEIT\FOOEXEC) instructs SRE-Filter to use
  1210.    D:\FAKEIT\FOOEXEC to interpret CGI-BIN scripts with .FOO extensions.
  1211.    Note that a fully  qualified name is used for this "FOO interpreter".
  1212.  
  1213. Of particular interest is the use of one of the OS/2 PERL interpreters;
  1214. since there is a slew of PERL scripts out there.  It's not that
  1215. hard to obtain a PERL interpreter -- see PERL.DOC for details
  1216. on one we've had some success with.
  1217.  
  1218. Note: by default, INTERPRET_TYPES=' PL=PERL5 '
  1219.  
  1220.  
  1221. (INTERPRET_TYPES can NOT be host specific!)
  1222.  
  1223. ********
  1224. LOGON_FAIL_FILE
  1225.  
  1226. If a logon failure occurs (either due to an incorrect username/password,
  1227. or due to logon_limit being violated), SRE-Filter can
  1228. either send a "401 Unauthorized" response; or the contents of
  1229. the LOGON_FAIL_FILE.
  1230.  
  1231. If LOGON_FAIL_FILE=0, then a "401 Unauthorized" response is sent.
  1232.  
  1233. Otherwise, the LOGON_FAIL_FILE is sent as is; with a few substitutions:
  1234.     <!--#URL--> phrases are substituted with the request selector.
  1235.     <!--#SERVER--> phrases are substituted with the servername.
  1236.     <!-- #WEBMASTER --> phrases are substituted with the WEBMASTER variable.
  1237.     <!-- #MESSAGE --> phrases are substituted with a short description
  1238.                      of the reason for failure
  1239.     <!-- #LINK --> phrases are substituted with a link back to this URL.
  1240.  
  1241.  
  1242. Notes:
  1243.    *  If the LOGON_FAIL_FILE is unavailable, a "401 Unauthorized" response is
  1244.       sent.
  1245.    *  When using #LINK, you probably should advice the client to "wait a
  1246.       minute before trying again" (given that the problem might be
  1247.       due to logon_limit being exceeded).
  1248.  
  1249. (LOGON_FAIL_FILE can be host specific)
  1250.  
  1251. *****************
  1252. MAX_POINTDIST : Used with the POINT type in mappable images.
  1253.  
  1254. Max_pointdist is used with mappable images.
  1255.  
  1256.     The "point" area is one of the 4 types of areas (circle, rectangles,
  1257.     polygons, points) used in selecting a URL from a mappable image.
  1258.     If a selected pixel does not lie in one of the first 3, or does not
  1259.     lie directly on top of a point; SRE-Filter determines to which (of
  1260.     the many possible different points that may appear in the map file)
  1261.     the selected pixel is closest to.  However, if the distance to this
  1262.     closest point is greater then max_pointdist, then the Default URL is used.
  1263.  
  1264. Thus, this  limits the region of space "potentially assigned" to each point.
  1265.  
  1266.    Of course, setting max_pointdist to be very high (say, 100000),
  1267.    will effectively cancel this limit.
  1268.  
  1269.   Example: max_pointdist=50
  1270.  
  1271. (MAX_POINTDIST can be host specific)
  1272.  
  1273. *************
  1274. NO_PROCESSING:  Suppress server side processing
  1275.  
  1276. Switch to dictate whether or not to allow server side processing.
  1277.         YES - Do NOT do  allow server side processing
  1278.             If YES, then requests for server side processing will cause
  1279.             a 401 Unauthorized message to be returned to the client.
  1280.         NO -  Allow server side processing.
  1281.  
  1282. Note: A NO_SSP permission (in the access_file), overrides a NO_PROCESSING='NO'.
  1283.  
  1284.   Example: no_processing="NO"
  1285.  
  1286. (NO_PROCESSING   can be host specific)
  1287.  
  1288. ************
  1289. NO_INTERPRET_CODE:  Suppress execution of "in-document" executables.
  1290.  
  1291. This is similar to NO_PROCESSING, but not as stringent -- it only applies
  1292. to the SELECT and INTERPRET CODE "server side include" keyphrases.
  1293.        YES-  Ignore SELECT and INTERPRET CODE server side include keyphrases.
  1294.        NO -  Process SELECT and INTERPRET CODE server side include keyphrases.
  1295. Note that NO_PROCESSING (and NO_SSP) have precedence -- if NO_PROCESSING is
  1296. on, the value of NO_INTERPRET_CODE is irrelevant.
  1297.  
  1298. Notes:
  1299.    *  A NO_CODE permission (in the access_file) overrides a
  1300.       NO_INTERPRET_CODE='NO'
  1301.  
  1302.    *  CGI-BIN scripts, INTERPRET FILE, and other "executed files" WILL
  1303.       be processed if NO_INTERPRET_CODE='YES' (assuming NO_PROCESSING, etc.
  1304.       is not binding).
  1305.       Hence:If NO_INTERPRET_CODE='YES', you can still use an equivalent
  1306.             INTERPRET FILE keyphrase.
  1307.  
  1308.    *  The idea is that users of your site will not be able to cause trouble
  1309.       by including ill-mannered code into their HTML documents.
  1310.       In other words:
  1311.           i) If  site administrators do not want to review HTML documents
  1312.              posted on their site (say, by students)
  1313.          ii) Site adminstrators will review  CGI-BIN scripts, etc. that these
  1314.              "students" wish to place on the server.
  1315.         iii) Site administrators DO want to grant server side processing
  1316.              and server side include privileges to clients.
  1317.       Then, a reasonable level of security, without too harshly limiting
  1318.       flexibility  can be achieved by setting NO_INTERPRET_CODE
  1319.       (or by judicious use of the NO_CODE permission).
  1320.  
  1321.  
  1322.    Example:  no_interpret_code='NO'
  1323.  
  1324. (NO_INTERPRET_CODE can be host specific)
  1325.  
  1326. ************
  1327. NO_INCLUDE:  Suppress server side includes.
  1328.  
  1329. Switch to dictate whether or not to process server side includes (SSIs).
  1330.     YES : Do NOT do dynamic page processing.
  1331.           Files sent as is (if SSI keyphrases occur, they will be sent "as is"
  1332.      NO :  Process server side includes.
  1333.  
  1334. If you  NEVER include SSI keyphrases, and you want to speed
  1335. up processing a bit, set NO_INCLUDE="YES"
  1336.  
  1337. Note: A NO_SSI permission (in the access_file), overrides  NO_INCLUDE=NO.
  1338.  
  1339.   Example: no_include="NO"
  1340.  
  1341. (NO_INCLUDE  can be host specific)
  1342.  
  1343. **********
  1344. NOEXT_TYPE: Determine how to handle "no extension" request selectors.
  1345.  
  1346. NOEXT_TYPE is used to instruct SRE-Filter what to do with requests that
  1347. have no extension, do not end in a /, and do not have ? in them.  There are
  1348. several allowed values of NOEXT_TYPE:
  1349.  
  1350.     DIR : Interpret as a directory; a / is appended to the end, and
  1351.           AUTO_NAME is then used.
  1352.   REDIR : Similar to DIR (a / is appended).  However, rather then immediately
  1353.           using AUTO_NAME; the client is "redirected" back to this new (/ appended)
  1354.           URL (at which time the AUTO_NAME feature kicks in).  This solves
  1355.           potential "resolution of local URL" problems, at the cost of slower
  1356.           overall response times. Note that REDIR is the default value.
  1357.   HTM or HTML : Interpret as an HTML file (a .HTM or .HTML is appended to
  1358.                 the end, respectively)
  1359.    NONE :  Use as is
  1360.   other_string: Append other_string.  For example, if NOEXT_TYPE='.GIF',
  1361.                 then .GIF will be appended to the end).
  1362.  
  1363.  Example: NOEXT_TYPE="DIR"
  1364.  
  1365. (NOEXT_TYPE   can be host specific)
  1366.  
  1367. CAUTION: When using NOEXT_TYPE (and other types of local redirection)
  1368. URL resolution by the client's browser may have unexpected consequences.
  1369. See the discussion of "local  vs remote redirection" at the bottom of
  1370. this document for details!
  1371.  
  1372. ***************
  1373. NOT_FOUND_URL : A message if the requested resource is not found.
  1374.  
  1375. This string is sent along with a generic "not found url" response.
  1376. Note that it should be a valid HTML string.
  1377. Set it to  " " if you want no such message sent.
  1378.  
  1379.   Example: not_found_url='<a href="/"> Visit the HOME_NAME page? </a> '
  1380.  
  1381. Note that the HOME_NAME substring will be replaced with the current
  1382. value of the HOME_NAME variable.
  1383.  
  1384.  
  1385. !!! Special option !!!
  1386.    If you want to return a custom document, perhaps one that lists
  1387.    several choices, you should use a special form of NOT_FOUND_URL.
  1388.    Specifically:
  1389.         NOT_FOUND_URL= 'FILE=fully_qualified_file_name'
  1390.    For example:
  1391.         NOT_FOUND_URL= 'FILE=d:\www\notfound.htm'
  1392.  
  1393.    If you are very ambitious, you can also append a custom "reponse code".
  1394.    For example:
  1395.         NOT_FOUND_URL= 'FILE=d:\www\notfound.htm, 200 Ok with error '
  1396.         (note the comma follwing the file name)
  1397.  
  1398.   The returned document will NOT have server side includes -- it is sent
  1399.   "as is".  There are a few special exception to this rule (for HTML
  1400.    documents):
  1401.        i) all occurences of <!-- #URL --> will be replaced with the
  1402.           request selector.
  1403.       ii) all occurences of <!-- #SERVER --> will be replaced with the
  1404.           server's IP address.
  1405.  
  1406.   More notes on the FILE= variant of NOT_FOUND_URL:
  1407.      * You can specify any type of document (i.e.; an HTML file, a GIF file,
  1408.      or a plain/text file).
  1409.      * An fully qualified file is expected: no attempt is made to map a
  1410.        relative file name to the data directory.
  1411.      * The file can be anywhere (it need not be in the data directory,
  1412.      or in virtual directories).
  1413.  
  1414.  
  1415. NOT_FOUND_URL can be host specific (and HOME_NAME can also
  1416. be host specific).
  1417.  
  1418.  
  1419. *********
  1420. OPTION_HIT_LINE : Used to write OPTION  info instead of counts
  1421.  
  1422. OPTION_HIT_LINE is used  to write out "# hits drawn from an OPTION
  1423. passed to me" -- that is, it used with the REPLACE OPTION_HITS keyphrase
  1424.  
  1425.   Example: OPTION_Hit_line=":: still access # "
  1426.  
  1427. Note: OPTION_HIT_LINE is somewhat obsolete -- it's major purpose is
  1428.       now better accomplished by using the HIT_CACHE_LEN parameter
  1429.  
  1430. (OPTION_HIT_LINE can be host specific)
  1431.  
  1432.  
  1433. *************************
  1434. OWNERS: Assigned SUPERUSER privileges
  1435.  
  1436. Owners are always given SUPERUSER privileges.
  1437. You can specify any number of owners, just seperate each of them
  1438. with a space. Note that wildcards are NOT allowed.  Furthermore,
  1439. you must specify an IP address (not an IP name).
  1440.  
  1441.     If there are no owners, set owners=0.
  1442.  
  1443.  Example: owners   = " 151.121.65.163 "
  1444.  
  1445. (OWNERS  can be host specific).
  1446.  
  1447.  
  1448. ************
  1449. PRE_FILTER: Call  user written pre-filters.
  1450.  
  1451. PRE_FILTER is used to control whether a set of user written "pre-filter" is
  1452. called before SRE-Filter is given control.  It can take 3 values:
  1453.  NO:  Do not call a pre-filter.
  1454.  YES: Call a pre-filter after checking logon privileges (if the client
  1455.       does not have logon rights, the pre-filter will not be called)
  1456.  FIRST:  Call a pre-filter as the first action (before checking logon rights)
  1457.  
  1458. Note: if the selector matches a public_url, then:
  1459.         > If PRE_FILTER=FIRST, then the pre filter will be called
  1460.         > Otherwise, it will NOT be called (that is, PRE_FILTER="YES" is
  1461.           treated as a NO.)
  1462.  
  1463.  
  1464. Example: PRE_FILTER="FIRST"
  1465.  
  1466. (PRE_FILTER  can be host specific)
  1467.  
  1468. ************
  1469. PREFILTER_NAME: Name(s) of procedure(s) to call as pre-filter(s).
  1470. This should point to a list of external procedures (or just to a
  1471. single external procedure).  Each of them will be called in turn
  1472. (or until one of them responds to the client).  Note that these
  1473. "PREFILTER" files should be in the GoServe working directory.
  1474.  
  1475.  Examples:  PREFILTER_NAME='PREFILTR'
  1476.             PREFILTER_NAME='PREFILT1.CMD  PREFILT9.CMD '
  1477.  
  1478.  
  1479. In the first example, note that a .80 (or .nnn if using port nnn) is added to
  1480. PREFILTR.
  1481.  
  1482. (PREFILTER_NAME  can be host specific)
  1483.  
  1484.  
  1485. ************
  1486. POST_FILTER: Call  user written post-filters.
  1487.  
  1488. POST_FILTER is used to control whether one or more  user written
  1489. "post-filters " are called before SRE-Filter is given control.
  1490. It can take 2 values:
  1491.  NO:  Do not call a post-filter.
  1492.  YES: Call a pre-filter after sending response to client.
  1493.  
  1494. (POST_FILTER  can be host specific)
  1495.  
  1496.  
  1497. ************
  1498. POSTFILTER_NAME: A series of procedures to call as  post filters.
  1499.  
  1500. POSTFILTER_NAME should contain a  list (or just one) procedures that
  1501. will be called as "post filters".
  1502. As with other external procedures, the procedures should correspond
  1503. to files with  names like POSTF1.80 (they should be in the GoServe
  1504. working directory).
  1505.  
  1506. If the  POSTFILTER_NAME variable is missing, a value of  POSTFILT will be used.
  1507.  
  1508.  Examples:  POSTFILTER_NAME='POSTRCRD.80'
  1509.             POSTFILTER_NAME='POST1.CMD POSTMAIL '
  1510.  
  1511. In the second example, first POST1.CMD will be called, and then POSTMAIL --
  1512. note that a .80 (or .nnn if using port nnn) is added to a name when there is
  1513. no extension (and no final period).
  1514.  
  1515. Notes:
  1516.  *  Post-filters are called AFTER the client has recieved a response.
  1517.     Therefore, post-filters can NOT be used to modify the response.
  1518.  
  1519.  *  Certain GoServe functions are NOT available to post-filter procedures
  1520.     (see the description of the SAVE_STATE parameter for details).
  1521.  
  1522.  *  POSTFILTER_NAME can be host specific
  1523.  
  1524.  
  1525. ****************
  1526. PUBLIC_URLS.  A stem variable containing a list of publicly accessible
  1527.               server resources.
  1528.  
  1529. The basic idea is that before logon or access_controls are checked,
  1530. SRE-Filter sees if the request selector matches one of the PUBLIC_URLS.
  1531. If so, no logon, etc. checking is attempted. In a sense, the PUBLIC_URLS are
  1532. purposely placed outside of the 'protection' of SRE-Filter's various access
  1533. controls.
  1534.  
  1535. The basic structure of a PUBLC_URLS entry is:
  1536.     candidate_sel  anoption filename
  1537. where:
  1538.     candidate_sel is compared against the request selector
  1539.     anoption can be: LITERAL LITERAL_NORECORD or NORECORD
  1540.     filename is a file name (with possible * "wildcard character")
  1541. (anoption and filename are both optional)
  1542.  
  1543. When the candidate_sel matches the request selector (and the *
  1544. wildcard character may be included in the candidate_sel), SRE-Filter
  1545. will treat the request as "a request for a Public Resource".  Specifically,
  1546. when anoption and filename are not specified, this means:
  1547.     * logon checking does NOT occur
  1548.     * the ACCESS_file is NOT examined
  1549.     * local redirections (such as home_name substitution, alias lookup
  1550.       and virtual directory lookup WILL occur).
  1551.     * server side includes may be attempted on HTML documents
  1552.  
  1553. The anoption and filename option are included to provide further
  1554. flexibility.
  1555.  
  1556.  
  1557.    * If anoption=NORECORD or LITERAL_NORECORD, SRE-Filter will not
  1558.      record the request, or perform any other "post filter" action
  1559.      (for example, it will not record this request in the common-log
  1560.      audit file). This use of NORECORD and LITERAL_NORECORD can help reduce
  1561.      server load.
  1562.  
  1563.    * For "literal" PUBLIC_URLS, access permissons are not looked-up.
  1564.      Thus, if you want to suppress post-filtering you MUST use the
  1565.      LITERAL_NORECORD variant (see SREFQUIK.DOC for an exception to this).
  1566.  
  1567.    * If filename is specified (after a LITERAL or a LITERAL_NORECORD),
  1568.      then filename is used "as is" (the data directory is not used).
  1569.      Actually, if filename contains a * wildcard, the usual "wildcard
  1570.      substitution" is attempted. The use of the filename argument
  1571.      allows a limited form of "aliasing" and "non-data directory file
  1572.      transfer" (remember: the LITERAL and LITERAL_NORECORD options
  1573.      suppress both virtual directory lookup and alias checking).
  1574.  
  1575. Examples:
  1576.  
  1577.      PUBLIC_URLS.1='INDEX.HTM'
  1578.      PUBLIC_URLS.2='MAPS/* '
  1579.      PUBLIC_URLS.3='STORE/AD1.HTM  LITERAL '
  1580.      PUBLIC_URLS.4='STORE/*.GIF  NORECORD '
  1581.      PUBLIC_URLS.5='PICTURE/HELLO.GIF  LITERAL_NORECORD  D:\PICTS\HELLO.GIF'
  1582.      PUBLIC_URLS.6='FAMILY/*  LITERAL_NORECORD  D:\PERSONAL\*'
  1583.      PUBLIC_URLS.7=0
  1584.  
  1585.     The second gives access to everything in the MAPS/ directory (which
  1586.     might include imagemaps)
  1587.  
  1588.     The third specifies that STORE/AD1.HTM is to be transfered "as is",
  1589.     where STORE/ is a subdirectory of the data directory.
  1590.  
  1591.    The fourth specifies that all .GIF files in STORE/ be transfered,
  1592.    with no recording of these transfers.
  1593.  
  1594.    The fifth specifies that PICTURE/HELLO.GIF cause transfer of
  1595.    d:\picts\hello.gif "as is"; with no "recording" or "post-filtering"
  1596.    done.
  1597.  
  1598.    The sixth specifies that all requests beginning with FAMILY/
  1599.    be directly mapped to D:\PERSONAL\, and transfered "as is", without
  1600.    recording the request.  For example, a request for FAMILY/JUNE.JPG
  1601.    would result in D:\PERSONAL\JUNE.JPG being transferred.
  1602.  
  1603.   The seventh, PUBLIC_URLS.7=0, is not required, but is recommended to
  1604.   avoid possible problems should you change INITFILT.80 "on the fly"
  1605.  
  1606. Notes:
  1607.  
  1608.    * To reiterate, the request selector (sent by the client to your server) is
  1609.      examined for matches to one of the PUBLIC_URLS.  If multiple wildcard
  1610.      matches (and no exact match) occur, the "best" match is used
  1611.         The "best match " is defined as the match with the most characters
  1612.         before the * character; and in the event of ties, the most after.
  1613.  
  1614.    * The "literal public_urls"  are especially useful when you use the
  1615.      SREFQUIK variant of SRE-Filter to speed up throughput.
  1616.  
  1617.    * HTACCESS file lookup is suppressed whenever the request matches a
  1618.      PUBLIC_URLS (HTACCESS access controls, redirection, etc. will not
  1619.      be attempted).
  1620.  
  1621.    * In general, all files are assumed to be relative to the data directory
  1622.      or a virtual directory.  Note that for "literal" public_url's,
  1623.      virtual directories are NOT checked -- so all files are assumed to
  1624.      be relative to the data directory
  1625.      Reminder:  You can skip the "data directory" lookup by
  1626.                 explicitly naming the file that this PUBLIC_URL maps to.
  1627.                 You can do this simply by adding the (fully qualified) file
  1628.                 name after the LITERAL option.
  1629.                 For example:
  1630.                    PUBLIC_URLS.3='STORE/AD1.HTM  LITERAL D:\SHOP\ADS\AD_1.HTM
  1631.  
  1632.    * If you have no PUBLIC_URLS, set PUBLIC_URLS.1=0
  1633.  
  1634.    *  To illustrate use of PUBLIC_URLS, SRE-Filter is shipped with
  1635.       PUBLIC_URLS (and an ALIAS_FILE) setup  to respond to a
  1636.       PUBLIC request by listing all files in the PUBFILES/ subdirectory
  1637.       of the data directory (assuming you've created such a subdirectory).
  1638.  
  1639.    * If a request matches a PUBLIC_URLS, then:
  1640.             If PRE_FILTER=FIRST, then the pre filter will be called.
  1641.             Otherwise, it will NOT be called (that is, PRE_FILTER="YES" is
  1642.             treated as a NO).
  1643.  
  1644.    * You can specify PUBLIC_URLS on a host-specific basis.
  1645.  
  1646.          In fact, non-host specific values of PUBLIC_URLS will
  1647.          NOT be used as "default" values!
  1648.  
  1649.      To do this, append a .HOST_NICKNAME to PUBLIC_ULRS.  For example:
  1650.          PUBLIC_URLS.2.ZOO='HOURS.HTM LITERAL'
  1651.      indicates that this entry  applies to requests to the "host"
  1652.      with a host nickname of ZOO.
  1653.  
  1654.  
  1655.  
  1656. CAUTION: When using  "literal PUBLIC_URLS with fully qualified file names"
  1657. (and other types of local redirection) URL resolution by the client's
  1658. browser may have unexpected consequences. See the discussion of
  1659. "local  vs remote redirection" at the bottom of this document for details!
  1660.  
  1661.  
  1662. **************
  1663. PUBLIC_PRIVS.  Additional privileges for all clients.
  1664.  
  1665. A space delimited list of additional privileges to be granted to all
  1666. clients).
  1667. Set PUBLIC_PRIVS=" " if no additional privileges  are needed.
  1668.  
  1669.  Examples: public_privs=" PUBLIC  MESSBOX=*"
  1670.             public_privs=' PUBLIC  MESSBOX=FORUM1  MESSBOX=PUBGRP* '
  1671.  
  1672.   Notes:
  1673.  
  1674.      * PUBLIC_PRIVS are used for requests to PUBLIC_URLS.
  1675.  
  1676.      * The MESSBOX=* privilege (the SRE-Filter default) grants read/write
  1677.       access to all "message boxes" (assuming Selector and FILE specific
  1678.       access controls are NOT in place).  In contrast,  MESSBOX=FORUM1
  1679.       permits access to the FORUM1 message box. and MESSBOX=PUBGRP*
  1680.       allows access to PUBGRP01, PUBGRP02, etc.
  1681.  
  1682.      * The CONTROL privilege allows some of the special (the !xxx) commands.
  1683.  
  1684.      * The BROADCAST privilege allows the user to "broadcast" e-mail messages
  1685.        using the SRE-Filter message facility.
  1686.  
  1687.      * The VIEWMESS privilege allows a client to download a
  1688.        SRE-Filter message box file (as an alternative to using the
  1689.        FORUM facility).
  1690.  
  1691.  
  1692.  
  1693. (PUBLIC_PRIVS  can be host specific)
  1694.  
  1695. *******
  1696. RECORD_OPTION : Select whether to record all allowed requests.
  1697.  
  1698.  Used if you want to keep a running total of requests.
  1699.  
  1700.   RECORD_OPTION can take several values
  1701.         NO = Do NOT Keep track of requests
  1702.         YES = Remove argument list, and keep track of all requests.
  1703.         YES_ALL = Do not remove argument list, and keep track of all requests.
  1704.         FILE = Record using the name of the requested file (or script)
  1705.  
  1706.     If RECORD_OPTION is <> NO, results will be written to the RECORD_ALL_FILE.
  1707.  
  1708.   Example:  record_option="YES"
  1709.  
  1710.  Notes:
  1711.     * The "argument list" is the ? (and anything that follows it) in a
  1712.       request selector.
  1713.     * If you use YES_ALL or FILE, be prepared for your RECORD_ALL_FILE to
  1714.       grow quite large.
  1715.     * Note that RECORD_ALL_FILE can be hand-edited.  You may want to add
  1716.       appropriate "wildcarded" entries (such as /TEMP/*) to keep track of
  1717.       all temporary files, thereby avoiding the creation of
  1718.       lots of useless entries.
  1719.     * The RECORD_CACHE_FILE (see section 2a) is used to control caching
  1720.       of the RECORD_ALL_FILE.
  1721.     * See the WRITE_LOGS parameters for an alternative auditing mechanism
  1722.       (the common-log file).
  1723.  
  1724. (RECORD_OPTION   can be host specific)
  1725.  
  1726. ************
  1727. SMTP_GATEWAY: Domain name of an SMTP server
  1728.  
  1729. The SMTP_GATEWAY is used when e-mail messages are to be sent; as may
  1730. be attempted by MESSAGE, FORUM, and several other SRE-Filter facilties.
  1731. This should be the domain name of a SMTP mail server.
  1732.  
  1733. You can use your own server as the SMTP gateway by running SENDMAIL.
  1734.  
  1735. Example:  SMTP_GATEWAY=MAILBOX.BIG.EDU
  1736.  
  1737.  
  1738. (SMTP_GATEWAY  can be host specific)
  1739.  
  1740. ***********
  1741. SSI_CACHE_ON
  1742.  
  1743. SSI_CACHE_ON is used to enable the server side include cache (SSI-cache).
  1744.  
  1745.     NO : Turn the SSI-Cache off -- HTML document will not be cached.
  1746.    YES : Turn the SSI-Cache on.
  1747.  
  1748. The SSI-cache is used to store "compiled" versions of HTML documents that
  1749. contain server side includes.  When a request for such document arrives,
  1750. SRE-Filter will return it (perhaps with further modifications).
  1751.  
  1752.    Turning off caching is sometimes useful in highly dynamic
  1753.    environments; say, where INCLUDE files are constantly changing.
  1754.  
  1755. Example: SSI_CACHE_ON = 'YES'
  1756.  
  1757.  
  1758. Notes:
  1759.  * For further discussion of SSI-caching, please see the SSICACHE.HTM
  1760.    file.
  1761.  
  1762.  * The SSI_CACHE_SIZE variable (set in SREFILTR.80) can also be used
  1763.    to disable the SSI-Cache.
  1764.  
  1765.  
  1766. (SSI_CACHE_ON can be host specific)
  1767.  
  1768. *******
  1769. SSI_SHTML_ONLY: Process server side includes for .SHT or .SHTML files only
  1770.  
  1771. SRE-Filter can be instructed to attempt server side includes (SSIs) only on
  1772. files with a .SHT or .SHTML extension -- files with .HTM (or .HTML)
  1773. extension will NOT be checked for server side includes.  This can speed
  1774. up file transfer, but does require more care when naming html files.
  1775.  
  1776.  SSI_SHTML_ONLY : NO.  All HTML documents will be checked for SSIs.
  1777.                        Note that files with .HTM .SHT .HTML and .SHTML are
  1778.                        assumed to be html documents (more specifically,
  1779.                        mime type text/html documents).
  1780.  
  1781.  SSI_SHTML_ONLY : YES  Only .SHTM and .SHTML files are checked for SSIs.
  1782.  
  1783. Notes:
  1784.   * SSIs are NOT processed when NO_INCLUDE='NO' (or if there is no
  1785.     NO_SSI permission).
  1786.  
  1787.   * The list of "SSI capable" files can be modified to include files with
  1788.     extensions other then .SHT and .SHTML.  See the description of the
  1789.     SSI_EXTENSIONS variable (in the next section of this document) for details.
  1790.  
  1791. REMINDER: SRE-Filter  never caches files that contain SSIs (since these
  1792.             are likely to change on a per request basis).
  1793.  
  1794. (SSI_SHTML_ONLY  can be host specific)
  1795.  
  1796.  
  1797. ****************
  1798. THE_REALM: "Realm" name to use in requests for username/password.
  1799.  
  1800. This is the "realm" which client are "challenged" by --
  1801. most browsers will display this "realm" information when asking for
  1802. username/password (as when CHECKLOG<>'ALWAYS' and a non-inhouse
  1803. client comes a calling)
  1804.  
  1805.   Example:  the_realm="OUR WEB SITE"
  1806.  
  1807. Notes:
  1808.  * Note that the "SEL-specific realm"  (specified in the access file) is used
  1809.    if it's available.
  1810.    If no "SEL-specific realm" is available, the value of THE_REALM is used.
  1811.  
  1812.  * THE_REALM can be host specific.
  1813.    For example: THE_REALM.ZOO='ZOO_SITE'
  1814.  
  1815.  
  1816.  
  1817. *******
  1818. UNALLOWEDIPS : Stem variable of "disallowed" IP addresses.
  1819.  
  1820. You can specify a set of ips that are NOT allowed in (a keep out pests
  1821. option). The syntax is the same (* allowed, consecutive numbering), as
  1822. the INHOUSEIPS. variables.
  1823.  
  1824.      Note: UNALLOWEDIPS. is ALWAYS checked (even if checklog=NO) -- and if a
  1825.            match is found, no logon is requested (they can't get in)
  1826.  
  1827.      Example:   unallowedips.1 = "149.126.12.*"
  1828.                 unallowedips.2="136.12.5.212"
  1829.                 unallowedips.3=0
  1830.      Example2: unallowedips.1="*.*.*.*"
  1831.                unallowedips.2=0
  1832.                 Only OWNERS and INHOUSEIPS.n clients can get in !
  1833.      Example3 : unallowedips.1 = 0
  1834.                  means that no one is automatically excluded.
  1835.  
  1836. Notes:
  1837.     * UNALLOWEDIPS. is checked after INHOUSEIPS. and OWNERS
  1838.     *  We recommend that the last unallowedips. value = 0.
  1839.  
  1840.  
  1841. UNALLOWEDIPS. may be specified on a host-specific basis.
  1842.     In fact, non-host specific values of UNALLOWEDIPS will NOT be used
  1843.     as "default" values (see INHOUSEIPS. for details)!
  1844.  
  1845.  
  1846. ********
  1847. UPLOAD_MAXSIZE:  The maximum size (in Kbytes) allowed in a uploaded file.
  1848.  
  1849. Uploaded files are placed on the server when a GET_URL or a PUT_FILE
  1850. request selector is recieved.
  1851.  
  1852. Set this small (say, 20) if you don't want large files dumped onto
  1853. your machine.  Set it to 0 to disable all file uploads!
  1854.  
  1855.   Example: upload_MAXSIZE=50
  1856.  
  1857. Note:
  1858.    Uploads using the PUT http method are not limited by the UPLOAD_MAXSIZE
  1859.    variable.
  1860.  
  1861. (UPLOAD_MAXSIZE can be host specific)
  1862.  
  1863.  
  1864. ********
  1865. UPLOAD_MINFREE: Space that must remain after an upload.
  1866.  
  1867. The minimum amount of free space (in Kbytes) that must exist in the
  1868. upload_DIRECTORY's hard drive after uploading a file with GET_URL or PUT_FILE.
  1869.  
  1870. Set this large (say 100000) if you want to be certain that your
  1871. hard drive doesn't get filled up).
  1872.  
  1873.  
  1874.    Example: upload_MINFREE=25000
  1875.  
  1876. Note: if either upload_MINFREE or upload_MAXSIZE are violated, file
  1877. upload will not occur.
  1878.  
  1879. (UPLOAD_MINFREE can be host specific)
  1880.  
  1881. *******
  1882. USE_STDOUT: In "INTERPRET" keyphrases, use standard output as a means
  1883.             of writing results to a document.
  1884.  
  1885. If USE_STDOUT='YES', then INTERPRET keyphrases will have two
  1886. means of inserting data into your document:
  1887.   1) If the "INTERPRET" code block contains interpret.results='some string'
  1888.   2) All QUEUE (and PUSH) statements will be inserted (after the string stored
  1889.      in interpret.results
  1890.  
  1891. If USE_STDOUT='NO', then ONLY step 1 above is used (QUEUE and PUSH commands
  1892. will be ignored).
  1893.  
  1894. With USE_STDOUT='YES', INTERPRET will work similarly to the #EXEC
  1895. server side include -- except SAY generated output is NOT retained
  1896. (GoServe seems to trap SAY statements, and sends their output to PMPRINTF).
  1897.  
  1898. Hence the need to use QUEUE (or PUSH) ...
  1899.  
  1900.     Example:  USE_STDOUT='YES'
  1901.  
  1902.  
  1903. (USE_STDOUT can be host specific)
  1904.  
  1905.  
  1906. *******
  1907. VERBOSE: Controls the extent of comments written to the Pmprintf window.
  1908.  
  1909. Set verbose=1  if you want a fair number of status messages written to
  1910. the pmprintf window.  Set to verbose= 0, and  only error messages and
  1911. certain initialization messages will be displayed.
  1912.  
  1913.     Example:   verbose=0
  1914.  
  1915. (VERBOSE  can be host specific)
  1916.  
  1917. Note: for even more comments, set VERBOSE=2, 3 or 4.
  1918.  
  1919.  
  1920. *********
  1921. WEBMASTER: A static variable.
  1922.  
  1923. The WEBMASTER variable is used in certain error and status messages.
  1924.  
  1925. Note: you might also want to put specify a CONTACT "REPLACEment variable"
  1926.       in the repstrgs_file file.
  1927.  
  1928.   Example: webmaster='<a href="mailto:bb1@farm.ag.gov"> Webmaster </a> '
  1929.  
  1930.  
  1931. WEBMASTER may be host specific
  1932.    (i.e.; WEBMASTER.SWEETSHOP='CANDY@SWEET.ISP.COM')
  1933.  
  1934. ********
  1935. WRITE_LOGS: Enable the common-log, browser, and referer logs.
  1936.  
  1937. The WRITE_LOGS variable is used to enable recording of all requests
  1938. toe the common-log audit file.  In addition, browser and referer information
  1939. will be written to seperate log files.
  1940.  
  1941.    YES = Enable these log files
  1942.    NO  = Do NOT record requestsion in these log files.
  1943.  
  1944.  Example: WRITE_LOGS='YES'
  1945.  
  1946. Note: For further details on the common-log, etc. log files, see
  1947.       SREFLOGS.DOC.
  1948.  
  1949. WRITE_LOGS may be host specific.
  1950.  
  1951.  
  1952. ********
  1953. List of files and directory identifier variables.
  1954.  
  1955. NOTE: If you change these, you MUST re-start GOSERVE!
  1956.  
  1957.    MESSBOX_DIR) Directory containing message boxes,
  1958.    MAILBOX_DIR) The in-box directory of an SMTP server.
  1959.    CGI_BIN_DIR) Location of CGI-BIN programs.
  1960.    TEMPFILE_DIR) Directory to use for creation of "temporary" files
  1961.        (by external procedures).  In comparison to the TEMPDATA_DIR,
  1962.        this is meant for short-life files (typically created by
  1963.        a server side program) that are meant to be downloaded
  1964.        in response to a subsequent request.
  1965.        Note: The !DELSEND "special action" looks for files in
  1966.              TEMPFILE_DIR.
  1967.    UPLOAD_DIR) Default location for uploaded files.
  1968.    TEMPDATA_DIR) Used for various SRE-Filter temporary files, such as
  1969.         _HITCACH.80, _ADDPRIV.80, and the $xxx.80 temporary
  1970.         "response" files.  In comparison to the TEMPFILE_DIR, these
  1971.         are files that are used by SRE-Filter, and are not intended
  1972.         to be directly accessible to clients.
  1973.    WORKDATA_DIR) Directory containing various SRE-Filter parameter files.
  1974.  
  1975.    COUNTER_FILE) "REPLACE HITS" counter file
  1976.    RECORD_ALL_FILE) "Record all requests" counter file
  1977.    SENDFILE_FILE) File used by SENDFILE procedure to keep track of requests.
  1978.    ACCESS_FILE) File used to control access when ALLOW_ACCESS is binding
  1979.    UPLOAD_LOG) Record of "uploaded files"
  1980.    ALIAS_FILE)  File containing the aliases.
  1981.    VIRTUAL_FILE) File containing "virtual directory" selector aliases.
  1982.    REPSTGS_FILE)  REPLACEment string file
  1983.    USERS_FILE) Username/password file
  1984.    INTERPRET_FILE) File containing blocks of REXX code for use by the
  1985.         INTERPRET keyphrase (obsolete, retained for backwards compatability).
  1986.  
  1987. Examples:
  1988.    messbox_dir='e:\goserve\MESSAGE'
  1989.    messbox_dir='c:\mptn\etc\mail'
  1990.  
  1991.    tempfile_dir='e:\WWW\temp'
  1992.  
  1993.    upload_dir='E:\goserve\upload'
  1994.    cgi_bin_dir='E:\goserve\CGI_BIN'
  1995.  
  1996.    counter_file='e:\goserve\DATA\COUNTER.CNT'
  1997.    record_all_file='e:\goserve\data\recrdall.cnt'
  1998.    sendfile_file='e:\goserve\DATA\SENDFILE.CNT'
  1999.    access_file='e:\goserve\DATA\ALL_FILE.CTL'
  2000.  
  2001.    tempdata_dir='e:\goserve\temp'
  2002.    virtual_file='E:\goserve\VIRTUAL.IN'
  2003.    alias_file='e:\goserve\ALIASES.IN'
  2004.    repstrgs_file='e:\goserve\REPSTRGS.IN'
  2005.    user_file='e:\goserve\USERS.IN'
  2006.    interpret_file='e:\goserve\INTERPET.IN'
  2007.  
  2008.  
  2009. Note: The various .CNT, .CTL, and .IN files that are shipped with
  2010.       SRE-Filter (such as ALL_FILE.CTL) contain additional documentation.
  2011.  
  2012.       Note that these various filenames are NOT host specific, but
  2013.       they MAY contain host specific entries!
  2014.  
  2015.  
  2016.                        =============================
  2017.  
  2018.   Section 2a.           Parameters in SREFILTR.80
  2019.  
  2020.  
  2021. In addition to the variable contained in INITFILT.80, there are a few
  2022. variables in SREFILTR.80 which the ambitious user may wish to change.
  2023. Note that NONE of these parameters are host-specfic.
  2024. Furthermore, in order for changes to these variables to take effect, you MUST
  2025. restart GoServe (this is not strictly true for some of these parameters,
  2026. but for safety sake, we recommend restarting GoServe whenever you
  2027. change any of these following values).
  2028.  
  2029.  
  2030.  
  2031. ********
  2032. ALWAYS_CHECK_PRIVS
  2033.  
  2034.    When a request selector matches a "public_URL", SRE-Filter does not
  2035.    require the client to have "access privileges".  However, the
  2036.    request may be for a SRE-Filter add-on which DOES require specific
  2037.    privileges.
  2038.  
  2039.    Setting ALWAYS_CHECK_PRIVS=1 tells SRE-Filter to "get the client
  2040.    privileges, even if she asked for a public_url".  A value of 0
  2041.    tells SRE-Filter to NOT lookup client privileges when PUBLIC_URLs
  2042.    are requested.
  2043.  
  2044.    Basically, If you know that public_urls NEVER require privilege
  2045.    information, setting ALWAYS_CHECK_PRIVS=0 will improve performance.
  2046.    If you aren't sure, the safe choice is to set ALWAYS_CHECK_PRIVS=1.
  2047.  
  2048.    Example:  always_check_privs=1
  2049.  
  2050.  
  2051.  
  2052. ********
  2053. BACKUPSERVERLIST and LOADTHRESHOLD
  2054.  
  2055.    These variables are used to control "load balancing".  When load balancing
  2056.    is active, the server will first check the number of active clients.
  2057.    If this exceeds the number specified in LOADTHRESHOLD, then the
  2058.    client is redirected to one of the server's listed in BACKUPSERVERLIST.
  2059.  
  2060.    LOADTHRESHOLD :
  2061.        If LOADTHRESHOLD=0, then this "load balancing" is not attempted.
  2062.        Otherwise, load balancing will occur if the number of active clients
  2063.        is greater then the value given.
  2064.  
  2065.    BACKUPSERVERLIST:
  2066.       If BACKUPSERVERLIST=' ', then load balancing is not attempted.
  2067.       Otherwise, it should contain a list of IP addresses of  alternate
  2068.       (backup) servers (that presumably mirror the main site).
  2069.       If  BACKUPSERVERLIST contains more then one entry (entries should be
  2070.       seperated by spaces), then a partially random method is used to select
  2071.       which server to redirect the client to.  For example:
  2072.                2 entries =  2/3 of the redirections go to the first entry.
  2073.                3 entries =  1/2 go to the first entry (1/4 to 2nd and 3rd)
  2074.  
  2075.      Examples:
  2076.                 loadthreshold=0
  2077.                 backupserverlist=' '
  2078.  
  2079.                 loadthreshold=6
  2080.                 backupserverlist='www2.oursite.net'
  2081.  
  2082.                 loadthreshold=3
  2083.                 backupserverlist='www2.oursite.net  overflow.hersite.net '
  2084.  
  2085.  
  2086. Citation: The basic idea is borrowed from Don Meyer's HTTP filter.
  2087.  
  2088. **********
  2089. CERN_ISMAP
  2090.  
  2091. The value(s) in the spaced delimited CERN_ISMAP variables are used
  2092. to indicate that this "is an image-map request".  You can specify several
  2093. different values (though you should only use one of them in your "image map"
  2094. URL).
  2095.  
  2096. When one of these identifier-strings appear in a request selector,
  2097. SRE-Filter assumes that the request "is a response from a mappable image"
  2098.  
  2099. For example, if CERN_ISMAP='/MAPCERN', then selectors (that are generated
  2100. by clicking on a mappable image) of the form:
  2101.      /MAPCERN/GIFSDIR/USMAP.MAP?123,312
  2102. will be interpreted as ...
  2103.      pixel 123,312, in combination with the instructions contained
  2104.      in /GISDIR/USMAP.MAP, is used to determine which URL to redirect
  2105.      the client to (where USMAP.MAP is a CERN style MAP file)
  2106.  
  2107. IMPORTANT NOTE:  the MAPCERN/ is NOT considered to be part of the directory name --
  2108.                        it is treated as a flag!
  2109.  
  2110. Example:
  2111.      CERN_ISMAP="MAPCERN/ CGI-BIG/HTIMAGE/"
  2112.  
  2113. Notes
  2114.   *  The trailing /  in the above example(s) is optional.
  2115.   *  The "map file location" is interpreted using the regular sre-filter rules (relative to
  2116.       the GoServe data directory, or to a virtual directory)
  2117.   *  For NCSA style image maps, see the  NCSA_ISMAP variable.
  2118.   *  CERN_ISMAP and NCSA_ISMAP replace the ISMAP_URL variable (found in 
  2119.      pre 1.2i.325 versions of  SRE-Filter).
  2120.  
  2121.  
  2122.  
  2123.  
  2124.  
  2125. ********
  2126. DELAY_SECONDS
  2127.  
  2128. Delay_seconds controls how frequently SRE-Filter
  2129. checks input files for updates.  Larger values mean more time between
  2130. checks.  If you never change initialization parameters, etc. you can
  2131. set this to a high value (say, 1000) to reduce the load on the server.
  2132.  
  2133. Example:
  2134.    delay_seconds=9
  2135.  
  2136. **********
  2137. DIR_CACHE_DURATION
  2138.  
  2139. DIR_CACHE_DURATION is used by SRE-Filter's !DIR facility. It is the lifespan
  2140. (in days, or fractional days) of entries in the "directory listing cache".
  2141.  
  2142. Example: DIR_CACHE_DURATION=3
  2143.  
  2144. **********
  2145. DIR_CACHE_SIZE
  2146.  
  2147. DIR_CACHE_DURATION is used by SRE-Filter's !DIR facility. It is the
  2148. maximum size (in Kbytes), of the "directory listing cache".
  2149.  
  2150. Example: DIR_CACHE_SIZE=1000
  2151.  
  2152. Notes:
  2153.   * setting DIR_CACHE_SIZE=0 will suppress use of the directory listing
  2154.     cache.
  2155.   * directory listing "cache files" are stored in the TEMPDATA_DIR, with
  2156.     names of _nnnnn.DSH (i.e.; _0000012.DSH).  There is also a
  2157.     _DIRLIST.IDX file used as an index to these listings).
  2158.  
  2159. **********
  2160. HIT_SUPERUSER_SUPPRESS
  2161.  
  2162. If HIT_OWNER_SUPPRESS is enabled (see description above), then
  2163. "OWNERS" will not have their hits recorded (in the RECORD_ALL_FILE
  2164. and in the hit counter file).
  2165. You can extend the "range" of HIT_SUPERUSER_SUPPRESS to include SUPERUSERs by
  2166. setting HIT_SUPERUSER_SUPPRESS=1.    That is, if HIT_OWNER_SUPPRESS=1 and
  2167. HIT_SUPERUSER_SUPPRESS=1, the request from OWNERS and from SUPERUSERs
  2168. will NOT be recorded.
  2169.  
  2170. Otherwise (if HIT_SUPERUSER_SUPPRESS=0), SUPERUSER requests will
  2171. be recorded.
  2172.  
  2173.   Example:
  2174.         HIT_SUPERUSER_SUPPRESS=1                (the default is 0)
  2175.  
  2176. Note:  if HIT_OWNER_SUPPRESS=0, then HIT_SUPERUSER_SUPPRESS is ignored
  2177.        (that is, SUPERUSER requests will  be recorded).
  2178.  
  2179. **********
  2180. NCSA_ISMAP
  2181.  
  2182. The value(s) in the spaced delimited NCSA_ISMAP variables are used 
  2183. to indicate that this "is an image-map request".  You can specify several
  2184. different values (though you should only use one of them in your "image map"
  2185. URL).
  2186.  
  2187. When one of these identifier-strings appear in a request selector,
  2188. SRE-Filter assumes that the request "is a response from a mappable image"
  2189.  
  2190. For example, if NCSA_ISMAP='/MAPIMAGE', then selectors (that are generated 
  2191. by clicking on a mappable image) of the form:
  2192.      /MAPIMAGE/GIFSDIR/USMAP.MAP?123,312
  2193. will be interpreted as ...
  2194.      pixel 123,312, in combination with the instructions contained
  2195.      in /GISDIR/USMAP.MAP, is used to determine which URL to redirect
  2196.      the client to (where USMAP.MAP is an NCSA style MAP file)
  2197.  
  2198. IMPORTANT NOTE:  the MAPIMAGE/ is NOT considered to be part of the directory name --
  2199.                        it is treated as a flag!
  2200.  
  2201. Example:
  2202.      NCSA_ISMAP="MAPIMAGE/ CGI-BIG/MAPIMAGE"   
  2203.  
  2204. Notes
  2205.   *  The trailing /  in the above example(s) is optional.
  2206.   *  The "map file location" is interpreted using the regular sre-filter rules (relative to
  2207.       the GoServe data directory, or to a virtual directory)
  2208.   *  For CERN style image maps, see the  CERN_ISMAP variable.
  2209.   *  CERN_ISMAP and NCSA_ISMAP replace the ISMAP_URL variable (found in 
  2210.       pre 1.2i.325 versions of  SRE-Filter).
  2211.  
  2212.  
  2213. *********
  2214. KEY_PREFACE
  2215.  
  2216. If the REPLACE, INCLUDE, OPTIONS, INTERPRET and SELECT "keywords"
  2217. appear at the beginning of real comments (and you are using the
  2218. default "server side keyphrase" delimiters of <!-- and -->), you
  2219. might want to add a "preface" to these keywords.  For example,
  2220. you can add the ! character, so that SRE-Filter will look for
  2221. !REPLACE, !INCLUDE, etc.
  2222.  
  2223.  
  2224. Note that KEY_PREFACE=0 or KEY_PREFACE='' means "do not add a preface".
  2225. Also note that the # can not be used as a preface (since it is
  2226. used by the HTTPD-style #INCLUDE keyphrase).
  2227.  
  2228.   Examples:
  2229.         KEY_PREFACE='!'
  2230.         KEY_PREFACE=0
  2231.  
  2232.  
  2233.  
  2234. ********
  2235. LOGON_LIMIT
  2236.  
  2237. As a security measure, SRE-Filter's "authorization facility" can limit
  2238. the number of unsuccessful attempts, per IP address per minute.  When this
  2239. limit is exceeded, for the next minute further attempts (from this IP address
  2240. will be immediately denied.
  2241.  
  2242. To enable this, set LOGON_LIMIT to the number of logon attempts per minute.
  2243. A value of 0 means "no limits".
  2244.  
  2245.   Examples:
  2246.         LOGON_LIMIT=0
  2247.         LOGON_LIMIT=3
  2248.  
  2249. Warning: do NOT use LOGON_LIMIT=1 (it causes odd problems)
  2250.  
  2251. Note: the authorization facility handles all client answers to
  2252.      "401 Unauthorized" server responses. These include "logon" requests
  2253.       and "SEL-specific" access requests.
  2254.  
  2255.  
  2256.  
  2257. ********
  2258. MESSAGE_SCRAMBLE
  2259.  
  2260. MESSAGE_SCRAMBLE is used to "encrypt" message-box passwords.
  2261. You can change it for a wee bit extra security (though security is never going
  2262. to be great).
  2263.  
  2264. Example:
  2265.    message_scramble=12415
  2266.  
  2267.  
  2268. ( message_scramble should be an integer less than 1 million and greater
  2269.   then 0).
  2270.  
  2271.  WARNING: If you change this, existing "message" passwords will not be
  2272.           decodable!  That is, they won't work anymore.
  2273.  
  2274.  
  2275. Note: only the password, which is just used to control deletion rights,
  2276. is encrypted.
  2277.  
  2278.  
  2279. ***********
  2280. NO_NO_RECORD
  2281.  
  2282. The NO_NO_RECORD option can be used to suppress the !NORECORD directive.
  2283. One reason to suppress !NORECORD is to prevent tricky clients
  2284. from sneaking by your audit mechanisms.
  2285.  
  2286. To disable the !NORECORD directive, set NO_NO_RECORD=1
  2287. To enable it, set NO_NO_RECORD=0
  2288.  
  2289.  
  2290. ***********
  2291. RECORD_CACHE_LINES:
  2292.  
  2293. This controls the size of the "request recorder" cache.
  2294. Shrinking the size of this cache (say, if you don't have
  2295. many documents) will free up memory.  Increasing it (say, you
  2296. have a large site, and a lot of RAM) will speed up request
  2297. recording.  In addition, since the RECORD_ALL_FILE is backed up and
  2298. then reset when the cache grows beyond RECORD_CACHE_LINES, a larger
  2299. cache may reduce fragmentation of these RECORD_ALL_FILE audit files.
  2300.  
  2301. To suppress caching, set RECORD_CACHE_LINES=0
  2302.  
  2303.  
  2304. Example:
  2305.   RECORD_CACHE_LINES=750
  2306.  
  2307.  
  2308. ***********
  2309. SAVE_STATE:
  2310.  
  2311. SRE-Filter can save some "request specific"  state-information:
  2312.     such as the "selector", the client's address, and the request headers.
  2313. This information will be written to a temporary file.
  2314. It is then relatively easy to access this information
  2315. by using SRE-Filter's SREF_READ_STATE macrospace procedure.
  2316.  
  2317. The most important use of this is by post-filter routines -- oftentimes
  2318. a necessity, given that GoServe will CRASH if EXTRACT (and other GoServe)
  2319. functions are called from a post-filter procedure.
  2320.  
  2321. Notes:
  2322.  
  2323.  *  The SREF_READ_STATE SRE-Filter macrospace procedure is designed to use the
  2324.     output generated by SAVE_STATE.  SREF_READ_STATE can be called from
  2325.     an external procedure, or by a post-filter procedure, using the
  2326.     following syntax:
  2327.         info=sref_read_state(state_var,occurence,thread,thread_cache_file)
  2328.     where state_var can be one of:
  2329.         SEL REQUEST SOURCE THREAD DATE_TIME SERVER_NAME PRIVSET
  2330.         CLIENT CLIENT_NAME CLIENT_PORT SERVER  SERVER_PORT TRANSACTION
  2331.     or state_var can be one of the "request header" variables.
  2332.  
  2333.  *  For more details, see the description of SREF_READ_STATE in
  2334.     SREFPRC1.DOC (SREFPRC1.DOC is available from:
  2335.     http://rpbcam.econ.ag.gov/srefilter/srefprc1.doc).
  2336.  
  2337. ************
  2338. SEM_MAXWAIT
  2339.  
  2340. The "independent threads" that help SRE-Filter work by waiting on
  2341. queues.  The waiting is partially contolled by a semaphores, which are
  2342. set whenever anything is written to a queue.  Since OS/2 can be a mite
  2343. slow about writing semaphores, it is sometimes convenient to check
  2344. the queue, and then go back to waiting if nothing is there.
  2345.  
  2346. To increase the frequency that this "check queue even though the semaphore
  2347. hasn't been set" occurs, select a low value of SEM_MAXWAIT.  Note that
  2348. SEM_MAXWAIT is in milliseconds, so values under 100 are considered low.
  2349.  
  2350. A possible drawback is that the smaller SEM_MAXWAIT is, the more
  2351. SRE-Filter will engage in useless queue examinations.  The best value to
  2352. use should be determined by experimentation.
  2353.  
  2354. Example: SEM_MAXWAIT=15000
  2355.  
  2356.  
  2357. *********
  2358. SSI_EXTENSIONS:  File extensions that are equivalent to SHTML.
  2359.  
  2360.  
  2361. The SSI_EXTENSIONS variable contains a space delimited list of file extensions
  2362. that will be treated as "SHTML" files.  That is, when SSI_SHTML_ONLY='YES',
  2363. only files with one of with these extensions will have server side
  2364. includes added.
  2365.  
  2366. If you add to this list, you may also need to specify that the file has a
  2367. text/html MIME type.  To do this, you should add entries to the MEDIATYP.RXX
  2368. file located in the GoServe directory.
  2369.  
  2370. Note: SRE-Filter's default value of ssi_extensions is:
  2371.     ssi_extensions=' SHT SHTML HTML-SSI HTM-SSI '
  2372.  
  2373. ****************
  2374. SSI_CACHE_SIZE
  2375.  
  2376. SSI_CACHE_SIZE is used to set the size of the "server side include cache".
  2377. You should enter the size in Kilobytes. For example:
  2378.  
  2379.    SSI_CACHE_SIZE=5000  (the default)
  2380.  
  2381. corresponds to a cache size of 5M.
  2382.  
  2383.  
  2384. Notes:
  2385.  
  2386.  * For further discussion of SSI-caching, please see the SSICACHE.HTM
  2387.    file.
  2388.  
  2389.  * Cached files are stored in your TEMPDATA_DIR directory (typically,
  2390.    GOSERVE\TEMP). They have names of _CSH????.80 (or .nnn, if you are
  2391.    using port .nnn).
  2392.  
  2393.  * Once the size of the cached files exceeds this amount, the oldest
  2394.    entries will be deleted (where oldest is measured in terms of
  2395.    "last request").
  2396.  
  2397.  * Setting SSI_CACHE_SIZE=0 will turn the SSI-Cache off (regardless of
  2398.    the value of SSI_CACHE_ON).
  2399.  
  2400. ****************
  2401. SSI_CACHE_DURATION
  2402.  
  2403. SSI_CACHE_DURATION is used to set (in days) the "lifespan"
  2404. of entries in the server side include cache.
  2405.  
  2406. After this lifespan has been exceeded, the entry will die.
  2407. This helps ensure that documents do not get "too far" out of
  2408. date (thus, egregious out-of-sync errors won't last forever).
  2409.  
  2410. Examples:
  2411.    SSI_CACHE_DURATION=0.5  --  a 12 hr. lifespan.
  2412.    SSI_CACHE_DURATION=30   -- a 30 day lifespan
  2413.    SSI_CACHE_DURATION=0    -- infinite lifespan
  2414.  
  2415.  
  2416. Note:
  2417.     You can use the <!-- CACHE DURATION m.n --> SSI keyphrase
  2418.     to override this "default" value on a file-by-file basis.
  2419.  
  2420.  
  2421. ****************
  2422. SSI_CACHE_STAMP
  2423.  
  2424. The SSI_CACHE_STAMP dictates which fields to use when determining
  2425. whether a SSI-cache "trigger" file has changed.  SSI_CACHE_DURATION
  2426. can have one of the following values:
  2427.  
  2428. ALL -- Use time,date, and size (if any change, the trigger is considered
  2429.        to be out-of-sync)
  2430. DATE -- Just use the date
  2431. TIME -- Just use the time (hr/minute)
  2432. DATETIME -- Use the time and date
  2433. SIZE -- Just use the size
  2434.  
  2435.  
  2436. Note:
  2437.     You can use the <!-- CACHE TRIGGER_TYPE stamp --> SSI keyphrase,
  2438.     where stamp is one of the above values,  to override this "default"
  2439.     value on a file-by-file basis.
  2440.  
  2441.  
  2442.  
  2443.                   ========================================
  2444.  
  2445.    Section 3.           A Comparison of Local vs. Remote Redirection of URL's
  2446.  
  2447.  
  2448. One of the strengths of SRE-Filter is the variety of redirection
  2449. mechanisms it offers, where redirection implies "sending the client
  2450. a file that is not a direct mapping of the request selector".  Redirection
  2451. has two general classes: remote and local.
  2452.  
  2453. "Remote" redirection, which  is what most of the literature simply
  2454. calls redirection, involves telling the client's browser that
  2455. "the url you have requested has been moved to xxxx", where xxxx may
  2456. be any URL  -- it need not be on the same server, and it need not have
  2457. the same name.
  2458.  
  2459. For example, an alias (in the alias-file) of
  2460.    whatgot  http://www.mine.org/dir1/index1.htm
  2461. would cause the server to send back a "302" response to the client's
  2462. browser whenever a request for "whatgot" arrives.  This 302 response,
  2463. would instruct the client's browser to automatically request
  2464. http://www.mine.org/dir1/index1.htm.
  2465.  
  2466. "Local" redirection is handled solely by the server, and involves
  2467. substituting the "request selector" with another "request selector".
  2468. SRE-Filter has a number of methods of specifying "local redirection",
  2469. such as the DEFAULT, AUTO_NAME, NOEXT_TYPE variables, and the
  2470. use of aliases of the form:
  2471.    whatgot   dir1/index.htm.
  2472.  
  2473. In all these cases, the browser assumes that the document it recieves
  2474. is a direct result of the  original request selector issued.
  2475.  
  2476. While offering a real convenience, with less demands on the client,
  2477. local redirection can have undesired effects.  In particular, "partial URLS"
  2478. in documents that were sent as the result of a local alias
  2479. may not work properly.
  2480.  
  2481. A short discussion of how browsers handle partial URLs is germane:
  2482.  
  2483.    When a link that is specified as a "partial URL"
  2484.       (such as <img src="wow.gif"> or <a href="wow.htm">)
  2485.    appears in one of the html documents on your site,the  URL actually
  2486.    requested by the browser is determined by using the "full" URL that
  2487.    invoked this html document (that contains this partial URL).
  2488.  
  2489.    For example, if the client asks for, and recieves:
  2490.       http://www.mine.net/dir1/index.htm,
  2491.    and index.htm contains  a "partial URL" of:
  2492.       <img src="wow.gif">,
  2493.    the client's browser would then try to get:
  2494.        http://www.mine.net/dir1/wow.gif.
  2495.  
  2496. In other words, when the browser is asked to get a partial url (that does NOT
  2497. begin with a /), it will take everything before the last / in the "parent" URL
  2498. (of the document that contains this partial URL) and then append the requested
  2499. partial URL.
  2500.  
  2501. (Actually, if a URL does not begin with http://, it will
  2502. append the "begins with / partial URL" to the http://.../ component of
  2503. the "full URL".)
  2504.  
  2505. The use of the "local redirection" features of SRE-Filter is
  2506. complicated by this "automatic resolution of partial URLS".
  2507.     For example, if the client requests:
  2508.         http://www.mine.net/dir1
  2509.     and SRE-Filter's auto-naming feature converts requested URL's
  2510.     (abstracting from the http://www.mine.net/ component) of
  2511.         dir1
  2512.     to
  2513.        /dir1/index.htm,
  2514.     and then sends /dir1/index.htm ... the browser has no way of knowing
  2515.     this --  that is, the client's browser will assume the server
  2516.     sent a file named :
  2517.          dir1
  2518.     that was located in the
  2519.         "root of www.mine.net".
  2520.     So, the browser would assume that a link (in this document) to
  2521.         wow.gif
  2522.     is also located in the root (of www.mine.net), and would request
  2523.          http://www.mine.net/wow.gif
  2524.     (which is wrong, it should request http://www.mine.net/dir/wow.gif)
  2525.  
  2526.  
  2527. So, if you want to use local redirection (AUTO_NAME, aliases, etc.) you should:
  2528.    1) fully specify the links in your documents ..
  2529.       i.e.; use /dir1/foo.gif instead of foo.gif
  2530.    2) Use a <base> element in the <HEAD> of each document...
  2531.       i.e.; <base href="/dir1/">
  2532.    3) Tell people to end "non file requests" with a "/"   ...
  2533.       i.e.; tell people to use "dir1/" rather then "dir1"
  2534.    4) Don't use local redirection (just use remote redirection).  This
  2535.       entails the use of "remote" aliases instead of AUTO_NAME, DEFAULT,
  2536.       and NOEXT_TYPE.
  2537.    5) Set NOEXT_TYPE='REDIR'
  2538.  
  2539. None of these are great solutions.  We might add a
  2540.    "automatically add the appropriate <base> element to the <HEAD>
  2541.    of all HTML documents"
  2542. feature to SRE-Filter in the future???
  2543. ....But, since many browsers don't seem to understand the <BASE> element
  2544.     (WEB ex 1.11d does, but I'm not sure about others)...
  2545.  
  2546.  
  2547.                      ========================================
  2548.  
  2549.   Section 3a.   An example of local redirection.
  2550.  
  2551. Local redirection, despite it's potential pitfalls, does provide some fairly
  2552. powerful configuration possibilitles.  As an example, consider recording
  2553. "successful" transfers of one of several files: STUFF.ZIP and OTHRSTUF.ZIP.
  2554.  
  2555.  i) The simple method.
  2556.        Assume an HTML document with the following links
  2557.            <A href="stuff.zip">Get our stuff </a> <br>
  2558.            or, <A href="othrstuf.zip">get our other stuff </a>
  2559.        Also assume that RECORD_OPTION='YES'
  2560.  
  2561.        When a client invokes one of these links, SRE-Filter will augment the
  2562.        appropriate entry in the RECORD_ALL_FILE.
  2563.  
  2564. If you wish to record "each individual" request, you could wade through
  2565. SRE-Filter's "common-log" audit file. A better idea is to use SENDFILE with
  2566. the COUNTER option:
  2567.  
  2568.    ii) Using SENDFILE, the above would be:
  2569.            <A href="sendfile?stuff.zip&counter=file=stuff">Get our stuff </a>
  2570.            <br> or, <A href="sendfile?othrstuf.zip&counter=file=othrstuf">
  2571.                 get our other stuff </a>
  2572.  
  2573.        The SENDFILE facility is used to transfer the document; and upon
  2574.        successful transfer, the appropriate .CNT file is updated.
  2575.  
  2576. One nice feature of SENDFILE is that unsuccessful (or aborted) transfers
  2577. are explicitily noted.  There is a minor problem: many browsers
  2578. (i.e.; Netscape) will give the client a default filename of "SENDFILE".
  2579. This will probably confuse a number of folks.
  2580.  
  2581. Fortunately, it's not  hard to avoid this problem by using local redirection.
  2582.  
  2583.    iii) Using local redirection, we use what looks like a standard URL, with
  2584.         the following in the HTML document:
  2585.            <A href="stuff.zip">Get our stuff </a> <br>
  2586.            <A href="othrstuf.zip"> or, get our other stuff </a>
  2587.         In addition, we include  the following entries in the ALIAS_FILE:
  2588.            stuff.zip     sendfile?stuff.zip&counter=file=stuff
  2589.            othrstuf.zip  sendfile?othrstuf.zip&counter=file=othrstuf
  2590.  
  2591.         When a request for "stuff.zip" arrives, SRE-Filter uses the
  2592.         sendfile?stuff.zip&counter=file=stuff alias. The client's browser
  2593.         doesn't know this, and will assume the file's name is stuff.zip
  2594.         (which is the desired assumption).
  2595.  
  2596. This use of aliases could not be replicated with virtual directories, or with
  2597. remote redirection!
  2598.  
  2599.  
  2600.                      ========================================
  2601.  
  2602.   Section 4.    A Simple Example of using PUBLIC_URLS to set up a site
  2603.  
  2604. This section discusses how one might efficiently design a web site with
  2605. three levels of security:
  2606.    1)Open, unmonitored access
  2607.    2)Open, monitored access
  2608.    3)Controlled access.
  2609.  
  2610. When using SRE-Filter, the best strategy for increasing throughput is to
  2611. make extensive use of PUBLIC_URLS, and to use the SREFQUIK version of
  2612. SRE-Filter.  More precisely, one should liberally specify "literal"
  2613. PUBLIC_URLS.  With this in mind, consider the following PUBLIC_URLS:
  2614.  
  2615. PUBLIC_URLS.1='~/*   LITERAL_NORECORD'
  2616. PUBLIC_URLS.2='~/*.SHTML  NORECORD '      (or, ~/*.SHT if you are using FAT)
  2617. PUBLIC_URLS.3='PUBLIC/*.HTM LITERAL'
  2618. PUBLIC_URLS.4='PUBLIC/*.SHTML'
  2619. PUBLIC_URLS.5='PUBLIC/*.GIF LITERAL_NORECORD'
  2620. PUBLIC_URLS.6='HELLO  LITERAL  D:\WWW\INDEX.HTM'
  2621. PUBLIC_URLS.7='STAFF/* LITERAL D:\WWW\PEOPLE\STAFF\*'
  2622. PUBLIC_URLS.8-'STAFF/*.SHTML '
  2623. public_urls.9=0
  2624.  
  2625. the following parameter settings:
  2626.  
  2627. SSI_SHTML_ONLY='YES'
  2628. HOME_DIR='STUDENTS/PERSONAL'
  2629.  
  2630. and the following entry in the ALIAS_FILE:
  2631.  
  2632. STAFF/*.SHTML   PEOPLE/STAFF/*.SHTML
  2633.  
  2634.  
  2635. PUBLIC_URLS.1 and .2 deal with documents available to the "open, unmonitored"
  2636. class of requests (i.e.; requests to student owned subdirectories under
  2637. the STUDENTS/PERSONAL directory of the data directory).  The LITERAL_NORECORD
  2638. in .1 instructs SRE-Filter to map the request selector directly to the
  2639. ~ sub-directory, and to suppress SRE-Filter auditing.  The NORECORD in .2 only
  2640. suppresses SRE-Filter auditing -- since LITERAL supresses server side
  2641. includes, we do not want to use LITERAL_NORECORD to suppress audit file
  2642. update.
  2643.  
  2644. The third and fourth entries, which deal with the "open, monitored access"
  2645. class of requests, are equivalent to the first two -- except SRE-Filter
  2646. auditing is not suppressed.  The fifth entry suppresses auditing for .GIF
  2647. files located in the PUBLIC subdirectory, which we may assume are relatively
  2648. unimportant to keep track of.
  2649.  
  2650. The sixth entry is equivalent to an "alias", with easy to remember
  2651. request selector mapped to a specific file.
  2652.  
  2653. The seventh and eighth entries are similar to the fourth and fifth.
  2654. URLs that begin with "STAFF/" (but that do not end in .SHTML) will
  2655. refer to files in or under D:\WWW\PEOPLE\STAFF. In contrast, selectors
  2656. that begin with STAFF, and end with .SHTML, are interpreted using the usual
  2657. SRE-Filter rules (i.e.; in the data directory or a virtual directory).
  2658. Also note that all requests to STAFF/* will be recorded (including .GIF files).
  2659.  
  2660. Lastly, requests that do NOT match these PUBLIC_URLS will be passed
  2661. through to SREFILTR.80, and will be subject to the  whatever access
  2662. controls (and aliasing) have been specified.  In other words, the
  2663. "controlled access" requests are the default!
  2664.  
  2665. Note: "suppression of SRE-Filter auditing" does NOT suppress additions
  2666.       to GoServe's GOAUDIT.80 file. It does suppress changes to SRE-Filter's
  2667.       RECORD_ALL_FILE
  2668.  
  2669.  
  2670. --- End of Document.
  2671.